C# 数据类型、默认值、new关键字、格式化数值结果表
数据类型概述
数据类型可描述为:
-
内置数据类型,如 int 或 char,
-
用户定义数据类型,如 class 或 interface。
-
数据类型还可以定义为:
-
值类型(C# 参考)(用于存储值),
-
引用类型(C# 参考)(用于存储对实际数据的引用)。
内置类型表
C# 类型 | .NET Framework 类型 |
System.Boolean | |
System.Byte | |
System.SByte | |
System.Char | |
System.Decimal | |
System.Double | |
System.Single | |
System.Int32 | |
System.UInt32 | |
System.Int64 | |
System.UInt64 | |
System.Object | |
System.Int16 | |
System.UInt16 | |
System.String |
默认值表
请记住:在 C# 中不允许使用未初始化的变量。
下表显示了由默认构造函数返回的值类型的默认值。默认构造函数是通过 new 运算符来调用的
值类型 | 默认值 |
false | |
0 | |
'/0' | |
0.0M | |
0.0D | |
表达式 (E)0 产生的值,其中 E 为 enum 标识符。 | |
0.0F | |
0 | |
0L | |
0 | |
0 | |
将所有的值类型字段设置为默认值并将所有的引用类型字段设置为 null 时产生的值。 | |
0 | |
0 | |
0 |
格式化数值结果表
C 或 c | 货币 | Console.Write("{0:C}", 2.5); Console.Write("{0:C}", -2.5); | $2.50 ($2.50) |
D 或 d | 十进制数 | Console.Write("{0:D5}", 25); | 00025 |
E 或 e | 科学型 | Console.Write("{0:E}", 250000); | 2.500000E+005 |
F 或 f | 固定点 | Console.Write("{0:F2}", 25); Console.Write("{0:F0}", 25); | 25.00 25 |
G 或 g | 常规 | Console.Write("{0:G}", 2.5); | 2.5 |
N 或 n | 数字 | Console.Write("{0:N}", 2500000); | 2,500,000.00 |
X 或 x | 十六进制 | Console.Write("{0:X}", 250); Console.Write("{0:X}", 0xffff); | FA FFFF |
new 关键字
int myInt = new int(); 相当于 int myInt = 0;
Point p = new Point(); //此调用后,该结构被认为已被明确赋值;也就是说该结构的所有成员均已初始化为各自的默认值。
在 C# 中,new 关键字可用作运算符、修饰符或约束。
- 用于创建对象和调用构造函数。例如:Class1 o = new Class1();
-
new 运算符还用于调用值类型的默认构造函数。例如:int i = new int();
-
在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。隐藏继承的成员意味着该成员的派生版本将替换基类版本。参见
-
new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。当泛型类创建类型的新实例时,将此约束应用于类型参数.参见
请记住,为结构声明默认的构造函数是错误的,因为每一个值类型都隐式具有一个公共的默认构造函数。可以在结构类型上声明参数化构造函数以设置其初始值,但是,只有在需要默认值之外的值时才必须这样做。
值类型对象(例如结构)是在堆栈上创建的,而引用类型对象(例如类)是在堆上创建的。两种类型的对象都是自动销毁的,但是,基于值类型的对象是在超出范围时销毁,而基于引用类型的对象则是在对该对象的最后一个引用被移除之后在某个不确定的时间销毁。对于占用固定资源(例如大量内存、文件句柄或网络连接)的引用类型,有时需要使用确定性终止以确保对象被尽快销毁。有关更多信息,请参见 using 语句(C# 参考)。
不能重载 new 运算符。
如果 new 运算符分配内存失败,将引发异常 OutOfMemoryException。
结构分为以下几类:
Numeric(数值)类型 整型 浮点型 decimal bool 用户定义的结构。
值类型的主要功能
基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的值。
与引用类型不同,从值类型不可能派生出新的类型。但与引用类型相同的是,结构也可以实现接口。
与引用类型不同,值类型不可能包含 null 值。然而,可空类型功能允许将 null 赋给值类型。
每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值
引用类型
引用类型的变量又称为对象,可存储对实际数据的引用。以下用于声明引用类型的关键字:
以下内置引用类型: