C# 基本数据类型

摘要:
前言每种编程语言都有基本的数据类型,如C、C++、Java、Python、PHP、JavaScript和各种数据库,C#也不例外。本文主要讨论C#中一些常见的基本数据类型。C#中的值类型如下:1)bool,System。布尔值,用于声明变量以存储布尔值true和false。14) enum,系统。枚举类型,一种由称为枚举器列表的一组命名常量组成的唯一类型。5) Object1)在C#的统一类型系统中,所有类型都直接或间接继承自Object。2) 数组类型是从抽象基类型array派生的引用类型。

Ø  前言

每个编程语言都有基本的数据类型,例如 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派生的引用类型。由于此类型实现了 IEnumerableIEnumerable<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 关键字,按地址传递参数,参数传递前必须赋值,在方法中使用前不需要初始化,有进有出

免责声明:文章转载自《C# 基本数据类型》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇代理ARP的总结selenium select下拉选择框定位处理的两种方式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C# 中 equals( ) 和 == 的区别和用法

Equals: 下面的语句中,x、y 和 z 表示不为 null 的对象引用。* 除涉及浮点型的情况外,x.Equals(x) 都返回 true。 * x.Equals(y) 返回与 y.Equals(x) 相同的值。 * 如果 x 和 y 都为 NaN,则 x.Equals(y) 返回 true。 * 当且仅当 x.Equals(z) 返回 true 时...

VBS数组函数学习实例分析

Array 函数 返回包含数组的Variant。 Array(arglist) 参数:arglist是赋给包含在Variant中的数组元素的值的列表(用逗号分隔)。如果没有指定此参数,则将会创建零长度的数组。 说明:用于引用数组元素的表示符,由跟随有括号的变量名组成,括号中包含指示所需元素的索引号。 在下面的示例中,第一条语句创建名为 A 的...

用C#实现Web代理服务器2

三、C#实现Web代理服务程序   经过了上面的介绍,我想大家对代理服务应该有了一个基本的认识,下面就让我们通过一个实例来深入体会一下如何用C#实现Web代理服务。Web代理服务的功能顺序是这样的:   (1)侦听端口,等待客户端浏览器发送来的Web请求信息。   (2)接收到客户端Web请求信息后,解析出目标Web服务器的地址,并创建一个Socket实例...

微服务-使用Redis实现分布式缓存

在单体中对于key信息和用户信息是放在内存中放的,通过session进行管理。 微服务是要放在分布式缓存中,以实现服务的无状态化。 @Autowired privateStringRedisTemplate redisTemplate; @Value("${file.prefix}") privateString imgPrefix;...

关于map 容器insert顺序

  今天测试我的节点,maya一次次死掉,一点一点的打印测试,良久才知:我想当然的将插入map的顺序,作为我执行的顺序直接遍历,打印数据显示,map有自动将键值排序的功能,比如以字符串为例,会按照a、b、c....顺序排好。    而且对于map,如果一个元素key不存在,但是直接map[key],那么map的size就增加1,我感觉有点儿相当于inser...

如何列出multimap中某個key的所有value? (C/C++) (STL)

map和multimap都自帶find(),不需Generic Algorithm就可搜尋,事實上,當container和algorithm都提供方法時,應先考慮使用container自帶的方法,因為algorithm考慮到泛型,還需要經過iterator,但container自帶的方法卻是量身訂做的,所以執行速度較快。要列出multimap中某個key的...