C# 基本数据类型

Ø  前言

每个编程语言都有基本的数据类型,例如 CC++JavaPythonPHPJavaScript、以及各种数据库等,而 C# 也不例外。本篇主要讨论 C# 中的一些常用的基础数据类型。

 

1.   值类型

Ø  值类型隐式继承于 System.ValueType,而 System.ValueType 隐式继承于 System.Object。在程序运行时,值类型的数据存储在内存栈中。下面列出 C# 中的值类型:

 

1)   bool, System.Boolean 类型,它用于声明变量来存储布尔值 true false

 

2)   sbyte, System.SByte 类型,最小值为-128,最大值为127,可显示转换为 intlongdoublefloatdecimal 类型。

 

3)   byte, System.Byte 类型,最小值为0,最大值为255,可显示转换为 intlongdoublefloatdecimal 类型。

 

4)   short, System.Int16 类型,最小值为-32768,最大值为32767,可显示转换为 intlongdoublefloatdecimal 类型。

 

5)   ushort, System.UInt16 类型,最小值为0,最大值为65535,可显示转换为 intlongdoubledecimalfloat 类型。

 

6)   int, System.Int32 类型,最小值为-2147483648,最大值为2147483647;可显示转换为 longdoubledecimalfloat 类型。

 

7)   uint, System.UInt32 类型,最小值为0,最大值为4294967295,声明 uint 类型变量使用后缀 uU,可显示转换为 longdoubledecimalfloat 类型。

 

8)   long, System.Int64 类型,最小值为-9223372036854775808,最大值为9223372036854775807L,声明 long 类型变量使用后缀 lL,可显示转换为 doubledecimalfloat 类型。

 

9)   ulong, System.UInt64 类型的最小值为0,最大值为18446744073709551615,声明 long 类型变量使用后缀 ulUL,可显示转转为 doubledecimalfloat 类型。

 

10)  float, System.Singe 类型,最小值为-3.4 × 1038,最大值为+3.4 × 1038,表示存储32位浮点值的简单类型,声明 float 类型变量使用后缀 fF,可显示转换为 double 类型,转为 intlongdecimal 类型,需隐式转换。

 

11)  double, System.Double 类型,最小值为±5.0 × 10324,最大值为±1.7 × 10308,表示存储64位浮点值的简单类型,声明 double 类型变量使用后缀 dD;换为 intlongfloatdecimal 类型,需隐式转换。

 

12)  decimal, System.Decimal 类型的大致范围(-7.9 x 1028 - 7.9 x 1028) / (100 - 28),表示128位数据类型,同浮点型相比,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算,声明 decimal 类型变量使用后缀 mM,转为 intlongdoublefloat 类型,需隐式转换。

 

13)  char, System.Char 类型范围(U+0000 U+FFFF),用于声明 .NET framework 使用Unicode字符表示 System.Char 结构的实例;可显示转换为 shortintlongfloatdoubledecimal 类型。转为 string 类型,需使用 ToString() 方法。

 

14)  enum, System.Enum 类型,一种由一组称为枚举数列表的命名常量组成的独特类型。

 

15)  struct 类型,通常用来封装小型相关变量组,例如:矩形的坐标或库存商品的特征。

 

2.   引用类型

Ø  引用类型的变量存储对实际数据的引用。

Ø  申明引用类型关键字:classinterfacedelegate

Ø  内置引用类型:dynamyicobjectstring

1)   class

2)   委托

1.   创建委托实例的三种方式

1)   使用相同签名的方法创建。

2)   使用匿名方法创建。

3)   使用lambda表达式创建。

3)   dynamic

1)   dynamicobject的区别

1.   dynamic与其它类型之间赋值不需要拆箱和装箱,而object需要拆箱和装箱。

4)   接口

1)   接口只能包含方法、属性、事件和索引器。

5)   object

1)   C# 的统一类型系统中,所有类型(预定义类型、用户定义类型、引用类型和值类型)都是直接或间接从 Object 继承的。 可以将任何类型的值赋给 object 类型的变量。将值类型的变量转换为对象的过程称为“装箱”。 将对象类型的变量转换为值类型的过程称为“取消装箱”。

6)   string

1)   string 类型表示一个字符序列(零个或更多 Unicode 字符)string .NET Framework String 的别名。尽管 string 是引用类型,但定义相等运算符(== !=)是为了比较 string 对象(而不是引用)的值。

 

3.   数组

1)   数组可以是一维多维交错的。

 

2)   数组类型是从抽象基类型 Array 派生的引用类型。由于此类型实现了 IEnumerable IEnumerable<T>,因此可以对 C# 中的所有数组使用 foreach 迭代。

 

3)   总结:多维数组与交错数组的区别在于,多位数组中相同等级的数组元素大小必须一致;而交错数组可以不相同。

1)   一维数组

1.   属性

1)   Rank 获取 System.Array 的秩(维数)。

2.   方法

1)   GetLength() 获取一个 32 位整数,该整数表示 System.Array 的指定维中的元素数。

2)   Reverse() 反转序列中元素的顺序。

2)   多维数组

3)   交错数组

1.   交错数组是元素为数组的数组,交错数组元素的维度和大小可以不同,交错数组有时称为“数组的数组”。以下示例说明如何声明、初始化和访问交错数组。

 

4.  

1)   类是一种“引用类型”,创建类的对象时,对象赋值到的变量只保存对该内存的引用。将对象引用赋给新变量时,新变量引用的是原始对象。通过一个变量做出的更改将反映在另一个变量中,因为两者引用同一数据。

 

2)   类(而非结构)支持继承的概念。派生自另一个类(“基类”)的类将自动包含基类除构造函数和析构函数之外的所有公共、受保护和内部成员。

 

3)   可以将类声明为抽象类,表示该类的一个或多个方法不具有实现。抽象类虽然无法直接实例化,但可以用作其他类的基类,由其他类提供缺少的实现。还可以将类声明为密封类,以禁止其他类从该类继承。

 

4)   可以将类(不是结构)声明为静态。静态类只能包含静态成员,不能使用 new 关键字进行实例化。在程序加载时,静态类的一个副本将加载到内存中,可通过类名称访问该类的成员。类和结构都可以包含静态成员。

 

5)   可以在一个代码文件中定义类、结构或方法的一部分,而在另一个代码文件中定义另一部分。

 

5.   结构

1)   结构是一种值类型。创建结构时,结构赋值到的变量保存该结构的实际数据。将结构赋给新变量时,将复制该结构。因此,新变量和原始变量包含同一数据的两个不同的副本。对一个副本的更改不影响另一个副本。

 

2)   在结构声明中,除非字段被声明为 const static,否则无法初始化。

 

3)   结构不能声明默认构造函数(没有参数的构造函数)或析构函数。

 

4)   结构在赋值时进行复制。将结构赋值给新变量时,将复制所有数据,并且对新副本所做的任何修改不会更改原始副本的数据。在使用值类型的集合(如 Dictionary<string, myStruct>)时,请务必记住这一点。

 

5)   结构是值类型,而类是引用类型。

 

6)   与类不同,结构的实例化可以不使用 new 运算符。

 

7)   结构可以声明带参数的构造函数。

 

8)   一个结构不能从另一个结构或类继承,而且不能作为一个类的基。所有结构都直接继承自 System.ValueType,后者继承自 System.Object

 

9)   结构可以实现接口。

 

10)  结构可用作可以为 null 的类型,因而可向其赋 null 值。

 

11)  如果使用 new 运算符创建结构对象,则会创建该结构对象,并调用适当的构造函数。与类不同,结构的实例化可以不使用 new运算符。在此情况下不存在构造函数调用,因而可以提高分配效率。但是,在初始化所有字段之前,字段将保持未赋值状态且对象不可用。

 

6.   其他

1.   voidvoid .NET Framework System.Void 类型的别名。

 

2.   var:从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型 var。隐式类型的本地变量是强类型变量(就好像您已经声明该类型一样),但由编译器确定类型。

 

3.   派生类可以通过将重写声明为sealed 来停止虚拟继承。这需要在类成员声明中的 override 关键字前面添加 sealed 关键字。

 

4.   out 关键字,按地址传递参数,参数传递前不需要赋值,在方法中使用前必须初始化,只出不进

 

5.   ref 关键字,按地址传递参数,参数传递前必须赋值,在方法中使用前不需要初始化,有进有出

原文地址:https://www.cnblogs.com/abeam/p/8316544.html