1.4C#语言的类型(Type)

C # 语言有两种类型:值类型 和 引用类型。值类型的变量直接存储数据,而引用类型的变量则存储对数据(称为“对象”)的引用。

System.Object类(关键字object) 是所有类型的最终基类。值类型 派生自 System.ValueType类 (派生自 System.Object类)。派生自 System.ValueType类 的类型在 CLR 中具有特殊行为。引用类型 直接派生自 System.Object类。

不可变类型(Immutable):值类型或引用类型的数据被赋值后是不可变的,如果被修改需在新内存地址保存新值。

可变类型(Mutable):值类型或引用类型的数据被赋值后是可变的,如果被修改只需在原有内存地址将新值取代旧值。

值类型包括:Struct(可变)、整数(不可变)、IEEE二进制浮点(不可变)、十进制浮点(不可变)、布尔(不可变)、Unicode Char(不可变)、枚举(不可变)、值元组(不可变)、Nullable(不可变)。

引用类型包括:Class(可变)、接口(可变)、Unicode String(不可变)、数组(可变)、元组(可变)、委托(可变)。

.4C#语言的类型(Type)"/

1.结构(Struct)类型

关键字说明默认值.NET API
struct格式为 struct S {...} 的用户自定义类型 —————— ——————

2.整数(Integral)类型

类别关键字位(Bit)范围/精度默认值.NET API
有符号整型sbyte8-128 … 1270System.SByte结构
short16-32768 … 327670System.Int16结构
int32-2,147,483,648 … 2,147,483,6470System.Int32结构
long64-9,223,372,036,854,775,808 … 9,223,372,036,854,775,8070System.Int64结构
无符号整型byte80 … 2550System.Byte结构
ushort160 … 655350System.UInt16结构
uint320 … 4,294,967,2950System.UInt32结构
ulong640 … 18,446,744,073,709,551,6150System.UInt64结构

3.IEEE二进制浮点类型

浮点类型遵循IEEE 754二进制浮点算术标准

关键字位(Bit)范围/精度默认值.NET API
float32±1.401298 × 10−45到±3.40282347 × 1038,大约 6-9 位数字0.0fSystem.Single结构
double64±4.94065645841247 × 10-324到±1.7976931348623157 × 10308,大约 15-17 位数字0.0dSystem.Double结构

4.十进制浮点类型

关键字位(Bit)范围/精度默认值.NET API
decimal128±1.0 × 10-28到±7.9228162514264337593543950335 × 1028,大约 28-29 位数字0.0mSystem.Decimal结构

5.布尔(Boolean)类型

关键字说明默认值.NET API
bool布尔值 true 或 falsefalseSystem.Boolean结构

6.Unicode 字符(Char)类型

关键字说明范围默认值.NET API
charUnicode UTF-16 字符U+0000 到 U+FFFFU+0000 System.Char结构

7.枚举(Enum)类型

关键字说明默认值.NET API
enum格式为 enum E {...} 的用户自定义类型0System.Enum

8.值元组(ValueTuple)类型

类型说明默认值.NET API
ValueTuple格式为 (T1, T2, ...) 的用户自定义类型——————System.ValueTuple结构

9.Nullable类型

关键字说明默认值.NET API
nullT?类型 表示值可以是 T 类型的值 或 null 值,例如string?nullSystem.Nullable<T>结构

10.类(Class)类型

关键字说明默认值.NET API
class格式为 class C {...} 的用户自定义类型 —————— ——————

11.接口(Interface)类型

关键字说明默认值.NET API
interface格式为 interface I {...} 的用户自定义类型 —————— ——————

12.Unicode 字符串(String)类型

关键字说明默认值.NET API
string Unicode UTF-16 字符序列nullSystem.String

13.数组(Array)类型

关键字说明默认值.NET API
array一维、多维和交错。 例如:int[]int[,] 和 int[][]nullSystem.Array

14.元组(Tuple)类型

类型说明默认值.NET API
Tuple格式为 (T1, T2, ...) 的用户自定义类型nullSystem.Tuple

15.委托(Delegate)类型

关键字说明默认值.NET API
delegate格式为的用户定义的类型,例如 delegate int D(...)nullSystem.Delegate

16.匿名类型

匿名类型提供了一种方便的方法,可以将一个或多个public只读属性封装到单个对象中,而无需先显式定义类型。

您可以通过将new运算符与对象初始值设定项(object initializer)一起使用来创建匿名类型。

var v = new { Amount = 108, Message = "Hello" };

Console.WriteLine(v.Amount + v.Message);

匿名类型通常用在select查询表达式的子句中。

var productQuery =
    from prod in products
    select new { prod.Color, prod.Price };

foreach (var v in productQuery)
{
    Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price);
}

匿名类型支持 with 表达式,这使您能够创建一个匿名类型的新实例,其中一个或多个属性具有新值:

var apple = new { Item = "apples", Price = 1.35 };
var onSale = apple with { Price = 0.79 };
Console.WriteLine(apple);
Console.WriteLine(onSale);

17.Void返回类型

关键字说明默认值.NET API
void指定无返回值的方法的返回值类型——————System.Void结构

18.装箱(Boxing)和取消装箱(Unboxing)

装箱

装箱是将值类型转换为 object 类型。

下例将整型变量 i 进行了装箱并赋值给对象 o

int i = 123;
// 隐式装箱i
object o = i;
// 显式装箱i
object o = (object)i;

取消装箱

然后,可以将对象 o 取消装箱并赋值给整型变量 j

// 显式取消装箱
int j = (int)o;

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/csharp/csharplang/7858.html

发表评论

登录后才能评论