39、C#學習筆記5
從概念上講,值類型是直接存儲其值,而引用類型存儲對其值的引用。這兩種類型存儲在內存的不同地方。在C#中,必須在設計類型時就決定類型實例的行為。如果在編寫代碼時,不能理解引用類型和值類型的區別,那麽將會給代碼帶來不必要的異常。
從內存空間上看,值類型是在棧中操作,而引用類型則在堆中分配存儲單元。棧在編譯時就分配好內存空間,在代碼中有棧的明確定義,而堆是程序運行中動態分配的內存空間,可以根據程序的運行情況動態的分配內存的大小。因此,值類型總是在內存中占用一個預定義的字節數。而引用類型的變量則在堆中分配一個內存空間,這個內存空間包含的是對另一個內存位置的引用,這個位置是托管堆中的一個地址,即存放變量實際值的地方。
也就是說值類型相當於現金,要用就直接用,而引用類型相當於存折,要用得先去銀行取。
C#的所有值類型均隱式派生自System.ValueType,而System.ValueType直接派生自System.Object。即System.ValueType本身是一個類類型,而不是值類型,其關鍵在於ValueType重寫了Equals()方法,從而對值類型按照實例的值來比較,而不是引用地址來比較。
枚舉類型是一種獨特的值類型,它用於聲明一組具有相同性質的常量。使用枚舉可以增加程序的可讀性和可維護性。同時,枚舉類型可以避免類型錯誤。
本質上,枚舉就是定義一個類,該類裏面的屬性都是靜態的弱數據類型的常量。
在定義枚舉類型時,如果不對其進行賦值,默認情況下,第一個枚舉數的值為0
在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("星期天
}
}
}
類型轉換:
類型轉換就是將一種類型轉換成另一種類型,轉換可以是隱式轉換,也可以是顯示轉換。對於類型轉換,可以這麽想象,大腦前面是一片內存,源和目標分別是兩個大小不同的內存塊(由變量及數據的類型來決定),將源數據賦值給目標內存的過程,就是用目標內存塊取套取源內存中的數據,能套多少算多少。
隱式轉換:就是不需要聲明就能進行的轉換。當一種類型的值轉換為大小相等或更大的另一個類型時,則發生擴大轉換,當一種類型值轉換為較小的另一類型時,則發生收縮轉換。
顯式轉換:
顯式轉換也可以稱為強制轉換,需要在代碼中明確地聲明要轉換的類型。如果要把高精度的變量的值賦值給低精度的變量,就需要使用顯式轉換。
例如:創建一個控制臺應用程序,將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就是引用類型。
拆箱允許將引用類型顯示轉換為值類型。
裝箱是將一個值類型轉換為一個對象類型,而拆箱是將一個對象類型顯示轉換為一個值類型。對於裝箱而言,他是將被裝箱的值類型復制為一個副本來轉換,而對於拆箱而言,需要註意類型的兼容性。例如:不能將一個值為:string的object類型轉換為int類型。
常量就是其值固定不變的量。而且常量的值在編譯時就已經確定了。C#中使用const定義常量,並且在創建常量是必須設置它的初始值。常量就相當於每個公民的身份證號,一旦設置就不允許修改。
本文出自 “奕奕微笑” 博客,請務必保留此出處http://yiyiweixiao.blog.51cto.com/2476874/1976709
39、C#學習筆記5