1,類別保存在堆中,這種方式可以保證出具的資料在生存週期上的靈活性,性能雖然有一些損失,但由於託管堆的優化,損失是比較小的。
但有時我們只需要一個比較小的資料結構,這時可以考慮使用結構
如
class windowForm
{
public int Left;
public int Right;
}
這樣一類,只有兩個存儲項,只需要處理這兩個變數。那麼可以這樣定義為結構
struct windowForm
{
public int Left;
public int Right;
windowForm(int left, int right)
{
this.Left = left;
this.Right = right;
}
public void set()
{
Console.WriteLine("Left:" + Left + " Right:" + Right);
}
}
這樣具有建構函數的結構就可以免去定義在隊伍中的麻煩和效能問題。
結構也可以定義屬性等。
2,結構是值類型,儲存在堆疊中或內聯
如下: 兩次Set方法處理的結構一樣,並不能改變Left的值。
class Program
{
static void Main(string[] args)
{
windowForm win = new windowForm();
win.set();
Change(win);
win.set();
Console.Read();
}
static void Change(windowForm win)
{
win.Left = 1;
}
}
3,結構不能繼承
4,結構的建構函數是由編譯器提供的一個無參數建構函數,自己不能定義新的用來替換。
5,結構主要用於較小的資料結構,過大會有效能損失。
6,結構在作為參數傳遞時用要用ref 關鍵字,否則每次都複製新的內容造成不必要的效能消耗。
7,一個結構賦值給另一個結構的時候,由於結構是非引用型所以每次都會進行全部複製,而類