3九、C#學習筆記5

從概念上講,值類型是直接存儲其值,而引用類型存儲對其值的引用。這兩種類型存儲在內存的不一樣地方。在C#中,必須在設計類型時就決定類型實例的行爲。若是在編寫代碼時,不能理解引用類型和值類型的區別,那麼將會給代碼帶來沒必要要的異常。ide

從內存空間上看,值類型是在棧中操做,而引用類型則在堆中分配存儲單元。棧在編譯時就分配好內存空間,在代碼中有棧的明肯定義,而堆是程序運行中動態分配的內存空間,能夠根據程序的運行狀況動態的分配內存的大小。所以,值類型老是在內存中佔用一個預約義的字節數。而引用類型的變量則在堆中分配一個內存空間,這個內存空間包含的是對另外一個內存位置的引用,這個位置是託管堆中的一個地址,即存放變量實際值的地方。spa

也就是說值類型至關於現金,要用就直接用,而引用類型至關於存摺,要用得先去銀行取。設計

C#的全部值類型均隱式派生自System.ValueType,而System.ValueType直接派生自System.Object。即System.ValueType自己是一個類類型,而不是值類型,其關鍵在於ValueType重寫了Equals()方法,從而對值類型按照實例的值來比較,而不是引用地址來比較。對象

枚舉類型是一種獨特的值類型,它用於聲明一組具備相同性質的常量。使用枚舉能夠增長程序的可讀性和可維護性。同時,枚舉類型能夠避免類型錯誤。內存

本質上,枚舉就是定義一個類,該類裏面的屬性都是靜態的弱數據類型的常量。string

在定義枚舉類型時,若是不對其進行賦值,默認狀況下,第一個枚舉數的值爲0,後面每一個枚舉數的值依次遞增1it

C#中使用關鍵字enum類聲明枚舉,其形式以下:編譯

enum 枚舉名class

{變量

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定義常量,而且在建立常量是必須設置它的初始值。常量就至關於每一個公民的×××號,一旦設置就不容許修改。

相關文章
相關標籤/搜索