常量就相当于每个公民的身份证号

时间:2021-12-26 08:38:30

从观点上讲,值类型是直接存储其值,而引用类型存储对其值的引用。这两种类型存储在内存的差别处所。在C#中,必需在设计类型时就决定类型实例的行为。如果在编写代码时,不能理解引用类型和值类型的区别,那么将会给代码带来不须要的异常。

从内存空间上看,值类型是在栈中操纵,而引用类型则在堆中分配存储单元。栈在编译时就分配好内存空间,在代码中有栈的明确界说,而堆是措施运行中动态分配的内存空间,可以按照措施的运行情况动态的分配内存的巨细。因此,值类型总是在内存中占用一个预界说的字节数。而引用类型的变量则在堆中分配一个内存空间,这个内存空间包罗的是对另一个内存位置的引用,这个位置是托管堆中的一个地点,即存放变量实际值的处所。

也就是说值类型相当于现金,要用就直接用,而引用类型相当于存折,要用得先去银行取。

C#的所有值类型均隐式派生自System.ValueType,而System.ValueType直接派生自System.Object。即System.ValueType自己是一个类类型,而不是值类型,其关键在于ValueType重写了Equals()要领,从而对值类型凭据实例的值来对照,而不是引用地点来对照。

枚举类型是一种奇特的值类型,它用于声明一组具有不异性质的常量。使用枚举可以增加措施的可读性和可维护性。同时,,枚举类型可以制止类型错误。

素质上,枚举就是界说一个类,该类里面的属性都是静态的弱数据类型的常量。

在界说枚举类型时,如果不同错误其进行赋值,默认情况下,第一个枚举数的值为0,后面每个枚举数的值依次递增1

C#中使用关键字enum类声明枚举,其形式如下:

enum 枚举名

{

list1=value1,

list2=value2,

list3=value3,

...

listN=valueN,

}

如下代码:

class Program

{

enum MyDate

{

Sun=0,

Mon=1,

Tue=2,

Wed=3,

Thi=4,

Fri=5,

Sat=6,

}

public static void Main(string[] args)

{

int k=(int)DateTime.Now.DayOfWeek;

switch(k)

{

case (int)MyDate.Sun:Console.WriteLine("星期天");break;

}

}

}


类型转换:

类型转换就是将一种类型转换成另一种类型,转换可以是隐式转换,也可以是显示转换。对付类型转换,可以这么想象,大脑前面是一片内存,源和方针分袂是两个巨细差此外内存块(由变量及数据的类型来决定),将源数据赋值给方针内存的过程,就是用方针内存块取套取源内存中的数据,能套几多算几多。

隐式转换:就是不需要声明就能进行的转换。当一种类型的值转换为巨细相等或更大的另一个类型时,则产生扩大转换,当一种类型值转换为较小的另一类型时,则产生收缩转换。

显式转换:

显式转换也可以称为强制转换,需要在代码中明确地声明要转换的类型。如果要把高精度的变量的值赋值给低精度的变量,就需要使用显式转换。

例如:创建一个控制台应用措施,将double类型的x转换为int类型。

public static void Main(string[] args)

{

double x=1234566.789958546;

int y=(int)x;

Console.WriteLine(y);

Console.ReadLine();

}

显式类型转换也可以通过Convert关键字进行显示类型转换。

好比:创建一个控制台应用措施,通过Convert进行显示类型转换。

public static void Main(string[] args)

{

double a=123;

int b=Convert.ToInt32(a);

Console.WriteLine(b);

Console.ReadLine();

}


装箱和拆箱:

将值类型转换为引用类型的过程叫做装箱。相反,将引用类型转换为值类型的过程叫做拆箱。

装箱允许将值类型隐式转换为引用类型。好比:

int a=1;

object b=i;

//这里的b就是引用类型。

拆箱允许将引用类型显示转换为值类型。