結構

 結構與類的區別是它們在內存中的存儲方式(類是存儲在堆(heap)上的引用類型,而結構是存儲在堆棧(stack)上的值類型)、訪問方式和一些特徵(如結構不支持繼承)。較小的數據類型使用結構可提高性能。但在語法上,結構與類非常相似,主要的區別是使用關鍵字struct代替class來聲明結構。

雖然結構是值類型,但在語法上常常可以把它們當作類來處理。爲結構定義函數與爲類定義函數完全相同.

  struct Dimensions
{
public double Length;
public double Width;

      Dimensions(double length, double width)
{
Length= length; 
Width= width; 
}

      public double Diagonal
{
{
get
{
return Math.Sqrt(Length* Length + Width* Width);
}
}
}


可以把C#中的結構看作是縮小的類。它們基本上與類相同,但更適合於把一些數據組合起來的場合。

與類的區別在於

● 結構是值類型,不是引用類型。它們存儲在堆棧中或存儲爲內聯(inline)(如果它們是另一個保存在堆中的對象的一部分),其生存期的限制與簡單的數據類型一樣。

● 結構不支持繼承。

● 結構的構造函數的工作方式有一些區別。尤其是編譯器總是提供一個無參數的默認構造函數,這是不允許替換的。

● 使用結構,可以指定字段如何在內存中佈局

結構和繼承

結構不是爲繼承設計的。不能從一個結構中繼承,唯一的例外是結構(和C#中的其他類型一樣)派生於類System.Object。因此,結構也可以訪問System.Object的方法。在結構中,甚至可以重寫System.Object中的方法-- 例如重寫ToString()方法。結構的繼承鏈是:每個結構派生於System.ValueType,System.ValueType派生於System.Object。ValueType並沒有給Object添加任何新成員,但提供了一些更適合結構的執行代碼。注意,不能爲結構提供其他基類:每個結構都派生於ValueType。

結構的構造函數

爲結構定義構造函數的方式與爲類定義構造函數的方式相同,但不允許定義無參數的構造函數。

默認構造函數把所有的字段都初始化爲0,且總是隱式地給出,即使提供了其他帶參數的構造函數,也是如此。也不能提供字段的初始值,以此繞過默認構造函數。

可以像類那樣爲結構提供Close()或Dispose()方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章