当前位置:网站首页>C#基础深入学习一
C#基础深入学习一
2022-07-04 12:42:00 【华为云】
C#基础深入学习01
值类型, 引用类型
值类型的数据存储在内存的栈中,引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。
值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。
值类型变量直接把变量的值保存在堆栈中,引用类型的变量把实际数据的地址保存在堆栈中,而实际数据则保存在堆中。
值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用。
数组
Array 类的属性
下表列出了 Array 类中一些最常用的属性:
| 序号 | 属性 & 描述 |
|---|---|
| 1 | IsFixedSize 获取一个值,该值指示数组是否带有固定大小。 |
| 2 | IsReadOnly 获取一个值,该值指示数组是否只读。 |
| 3 | Length 获取一个 32 位整数,该值表示所有维度的数组中的元素总数。 |
| 4 | LongLength 获取一个 64 位整数,该值表示所有维度的数组中的元素总数。 |
| 5 | Rank 获取数组的秩(维度)。 |
如需了解 Array 类的完整的属性列表,请参阅微软的 C# 文档。
Array 类的方法
下表列出了 Array 类中一些最常用的方法:
| 序号 | 方法 & 描述 |
|---|---|
| 1 | Clear 根据元素的类型,设置数组中某个范围的元素为零、为 false 或者为 null。 |
| 2 | Copy(Array, Array, Int32) 从数组的第一个元素开始复制某个范围的元素到另一个数组的第一个元素位置。长度由一个 32 位整数指定。 |
| 3 | CopyTo(Array, Int32) 从当前的一维数组中复制所有的元素到一个指定的一维数组的指定索引位置。索引由一个 32 位整数指定。 |
| 4 | GetLength 获取一个 32 位整数,该值表示指定维度的数组中的元素总数。 |
| 5 | GetLongLength 获取一个 64 位整数,该值表示指定维度的数组中的元素总数。 |
| 6 | GetLowerBound 获取数组中指定维度的下界。 |
| 7 | GetType 获取当前实例的类型。从对象(Object)继承。 |
| 8 | GetUpperBound 获取数组中指定维度的上界。 |
| 9 | GetValue(Int32) 获取一维数组中指定位置的值。索引由一个 32 位整数指定。 |
| 10 | IndexOf(Array, Object) 搜索指定的对象,返回整个一维数组中第一次出现的索引。 |
| 11 | Reverse(Array) 逆转整个一维数组中元素的顺序。 |
| 12 | SetValue(Object, Int32) 给一维数组中指定位置的元素设置值。索引由一个 32 位整数指定。 |
| 13 | Sort(Array) 使用数组的每个元素的 IComparable 实现来排序整个一维数组中的元素。 |
| 14 | ToString 返回一个表示当前对象的字符串。从对象(Object)继承。 |
params 关键字
在使用数组作为形参时,C# 提供了 params 关键字,使调用数组为形参的方法时,既可以传递数组实参,也可以传递一组数组元素。params 的使用格式为:
public 返回类型 方法名称( params 类型名称[] 数组名称 )结构体(Struct)
在 C# 中,结构体是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。struct 关键字用于创建结构体。
结构的特点
您已经用了一个简单的名为 Books 的结构。在 C# 中的结构与传统的 C 或 C++ 中的结构不同。C# 中的结构有以下特点:
- 结构可带有方法、字段、索引、属性、运算符方法和事件。
- 结构可定义构造函数,但不能定义析构函数。但是,您不能为结构定义无参构造函数。无参构造函数(默认)是自动定义的,且不能被改变。
- 与类不同,结构不能继承其他的结构或类。
- 结构不能作为其他结构或类的基础结构。
- 结构可实现一个或多个接口。
- 结构成员不能指定为 abstract、virtual 或 protected。
- 当您使用 New 操作符创建一个结构对象时,会调用适当的构造函数来创建结构。与类不同,结构可以不使用 New 操作符即可被实例化。
- 如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用。
类 vs 结构
类和结构有以下几个基本的不同点:
- 类是引用类型,结构是值类型。
- 结构不支持继承。
- 结构不能声明默认的构造函数。
- 结构体的构造函数中,必须为结构体所有字段赋值,类的构造函数无此限制。
- 结构体中声明的字段无法赋予初值,类可以。
边栏推荐
- AI painting minimalist tutorial
- 微服务入门
- Rsyslog配置及使用教程
- Interviewer: what is the difference between redis expiration deletion strategy and memory obsolescence strategy?
- 求解:在oracle中如何用一条语句用delete删除两个表中jack的信息
- 室外LED屏幕防水吗?
- 高效!用虚拟用户搭建FTP工作环境
- 6 分钟看完 BGP 协议。
- 从0到1建设智能灰度数据体系:以vivo游戏中心为例
- Efficient! Build FTP working environment with virtual users
猜你喜欢

Alibaba cloud award winning experience: build a highly available system with polardb-x

Practice: fabric user certificate revocation operation process

Zhongang Mining: in order to ensure sufficient supply of fluorite, it is imperative to open source and save flow

聊聊支付流程的设计与实现逻辑

诸神黄昏时代的对比学习

n++也不靠谱

runc hang 导致 Kubernetes 节点 NotReady

从0到1建设智能灰度数据体系:以vivo游戏中心为例

【云原生 | Kubernetes篇】深入了解Ingress(十二)

A data person understands and deepens the domain model
随机推荐
CA:用于移动端的高效坐标注意力机制 | CVPR 2021
Transformer principle and code elaboration (pytorch)
Database lock table? Don't panic, this article teaches you how to solve it
用fail2ban阻止密码尝试攻
Comprehensive evaluation of modular note taking software: craft, notation, flowus
Etcd storage, watch and expiration mechanism
[AI system frontier dynamics, issue 40] Hinton: my deep learning career and research mind method; Google refutes rumors and gives up tensorflow; The apotheosis framework is officially open source
Cann operator: using iterators to efficiently realize tensor data cutting and blocking processing
一文掌握数仓中auto analyze的使用
Solution: how to delete the information of Jack in two tables with delete in one statement in Oracle
再说rsync+inotify实现数据的实时备份
Interviewer: what is the difference between redis expiration deletion strategy and memory obsolescence strategy?
AI 绘画极简教程
Practice: fabric user certificate revocation operation process
使用 NSProxy 实现消息转发
CVPR 2022 | transfusion: Lidar camera fusion for 3D target detection with transformer
AI 绘画极简教程
读《认知觉醒》
2022年中国移动阅读市场年度综合分析
[FAQ] summary of common causes and solutions of Huawei account service error 907135701