首页 > 代码库 > C#类型(一)

C#类型(一)

1. C# 类型体系包含下列几种类别:值类型、引用类型、指针类型。

值类型的变量存储数据,而引用类型的变量存储对实际数据的引用。 引用类型也称为对象。 指针类型仅可用于 unsafe 模式。
通过装箱和取消装箱,可以将值类型转换为引用类型,然后再转换回值类型。 除了装箱值类型外,无法将引用类型转换为值类型。
值类型也可以为 null,这意味着它们能存储其他非值状态。

2. 值类型包括:(2.1)结构 、(2.2)枚举

(2.1)结构分为以下几类:(2.1.1)Numeric(数值)类型、(2.1.2)bool、(2.1.3)用户定义的结构

(2.1.1)Numeric(数值)类型分为:(2.1.1.1)整型、(2.1.1.2)浮点型、(2.1.1.3)decimal型。

(2.1.1.1)整型表:

sbyte:有符号8位整数 -128到127

byte:无符号8位整数 0到256

char:16位Unicode 字符 U+0000 到 U+ffff

short:有符号16位整数 -32768到32767

ushort:无符号16位整数 0到65535

int:有符号32位整数 -2,147,483,648 到 2,147,483,647

uint:无符号32位整数 0 到 4,294,967,295

long:有符号64为整数 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807

ulong:无符号64位整数 0 到 18,446,744,073,709,551,615

 

(2.1.1.2)浮点型:float 单精度浮点型 & double 双精度浮点型

float :关键字表示存储 32 位浮点值的简单类型。 

默认情况下,赋值运算符右侧的实数被视为 double。 因此,应使用后缀 f 或 F 初始化浮点型变量,如以下示例中所示:float x = 3.5F;
如果在以上声明中不使用后缀,则会因为尝试将一个 double 值存储到 float 变量中而发生编译错误。

double :关键字表示存储 64 位浮点值的简单类型。
默认情况下,赋值运算符右侧的实数被视为 double。 但是,如果希望整数被视为 double,请使用后缀 d 或 D,例如:double x = 3D;


可在一个表达式中兼用数值整型和浮点型。 在此情况下,整型将转换为浮点型。 根据以下规则计算表达式:
如果其中一个浮点类型为 double,则表达式的计算结果为 double 或 bool(在关系表达式或布尔表达式中)。
如果表达式中不存在 double 类型,则表达式的计算结果为 float 或 bool(在关系表达式或布尔表达式中)。

 

(2.1.1.3)decimal 关键字表示 128 位数据类型。同浮点型相比,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。
如果希望实数被视为 decimal 类型,请使用后缀 m 或 M,例如:
decimal myMoney = 300.5m;
如果没有后缀 m,数字将被视为 double 类型,从而导致编译器错误。
整型被隐式转换为 decimal,其计算结果为 decimal。
在浮点型和 decimal 类型之间不存在隐式转换;因此,必须使用强制转换在这两种类型之间进行转换。 例如:
decimal myMoney = 99.9m;
double x = (double)myMoney;
myMoney = (decimal)x;

 

(2.1.2)bool:是bool keyword is an alias of System.Boolean.‘ data-guid="404b1c5d38075636f7d3975d8e5829e0"> System.Boolean 的别名。 true and false.‘ data-guid="1897e648124eb333f880159f302b71c6">它用于声明变量来存储布尔值 true 和 false。

如果需要一个也可以有 null 值的布尔型变量,请使用 bool?。
bool 变量的默认值为 false。 bool? 变量的默认值为 null。
在 C++ 中,bool 类型的值可转换为 int 类型的值;也就是说,false 等效于零值,而 true 等效于非零值。 在 C# 中,不存在 bool 类型与其他类型之间的相互转换。

 

(2.2)枚举

enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常量组成的独特类型。
通常情况下,最好是在命名空间内直接定义枚举,以便该命名空间中的所有类都能够同样方便地访问它。 但是,还可以将枚举嵌套在类或结构中。
默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。
如下面的示例所示枚举数可用初始值来重写默认值。
enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
在此枚举中,强制元素序列从 1 而不是 0 开始。 但是,一般建议包括值为 0 的常量。
每种枚举类型都有基础类型,该类型可以是除 char 以外的任何整型。 枚举元素的默认基础类型为 int。 要声明另一整型枚举(如 byte),请在标识符之后紧跟类型,然后再使用冒号,如下面的示例所示。
enum Days : byte {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
准许使用的枚举类型有 byte、sbyte、short、ushort、int、uint、long 或 ulong。
可以给 Days 类型的变量赋以基础类型范围内的任何值,所赋的值不限于已命名的常数。
基础类型指定为每个枚举数分配的存储大小。 但是,从 enum 类型到整型的转换需要用显式类型转换来完成。 例如,下面的语句使用强制转换(从 enum 转换为 int)将枚举数 Sun 赋值给一个 int 类型的变量。
int x = (int)Days.Sun;

可靠性:
给新版本的枚举赋其他值,或者更改新版本中枚举成员的值,可导致相关源代码出现问题。 通常在 switch 语句中使用枚举值。 如果 enum 类型中添加了其他元素,则 switch 语句的默认节可能被意外选定。
如果其他开发人员使用您的代码,则需要提供相关说明,告诉开发人员如果任何 enum 类型中添加了新元素,他们的代码应该如何响应。