1. 程式人生 > >39、C#學習筆記5

39、C#學習筆記5

c#

從概念上講,值類型是直接存儲其值,而引用類型存儲對其值的引用。這兩種類型存儲在內存的不同地方。在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就是引用類型。

拆箱允許將引用類型顯示轉換為值類型。

裝箱是將一個值類型轉換為一個對象類型,而拆箱是將一個對象類型顯示轉換為一個值類型。對於裝箱而言,他是將被裝箱的值類型復制為一個副本來轉換,而對於拆箱而言,需要註意類型的兼容性。例如:不能將一個值為:stringobject類型轉換為int類型。

常量就是其值固定不變的量。而且常量的值在編譯時就已經確定了。C#中使用const定義常量,並且在創建常量是必須設置它的初始值。常量就相當於每個公民的身份證號,一旦設置就不允許修改。



本文出自 “奕奕微笑” 博客,請務必保留此出處http://yiyiweixiao.blog.51cto.com/2476874/1976709

39、C#學習筆記5