2012-12-22 267 views
7

我所遇到的一些方法寫在asp.net業務邏輯,但我想知道,下面2例如,什麼是使用結構來存儲類變量的好處:業務邏輯類

namespace Shopping 
{ 
    public struct ShoppingCart 
    { 
     public string Color; 
     public int ProductId; 
    } 

    public partial class MyShoppingCart 
    { 

     public decimal GetTotal(string cartID) 
     { 
     } 

     // Some other methods ... 
    } 
} 

namespace Shopping 
{ 
    public partial class MyShoppingCart 
    { 
     public string Color{ get; set; } 
     public int ProductId{ get; set; } 

     public decimal GetTotal(string cartID) 
     { 
     } 

     // Some other methods ... 
    } 
} 

回答

5

由於dsimcha國their answer here

每當你不需要多態性,希望值語義,並希望 到避免堆分配和相關的垃圾回收開銷 。然而,需要注意的是,結構(任意大)比類引用(通常是一個機器字)要貴得多,所以類在實踐中最終會變得更快。

由於JoshBerke國his answer here

使用結構,當你想的語義值,而不是引用語義。

http://msdn.microsoft.com/en-us/library/ms228593.aspx

1.7結構

象類,結構是可以包含數據 成員和函數成員數據結構,但與類不同,結構是值 類型和不需要堆分配。結構類型爲 的變量直接存儲結構的數據,而類 類型的變量存儲對動態分配對象的引用。 Struct 類型不支持用戶指定的繼承,並且所有結構類型 都隱式地從類型對象繼承。

結構對於具有值語義的小數據結構特別有用。複雜的數字,座標系中的點或字典中的鍵值對都是結構的很好例子。 對小數據結構使用結構而不是類可以使應用程序 執行的內存分配數量有很大差異。例如,以下程序會創建並初始化100個點的數組。隨着Point實現爲一個類,實例化單獨的對象 - 一個用於數組,一個用於100個元素。

+0

感謝您的明確解釋。 – k80sg

+10

剽竊 - 第一段是從[什麼時候在C#中使用結構體]批量拷貝的(http://stackoverflow.com/q/521298) –

+4

即使所有的編輯,這裏仍然沒有任何* original *材料。 – jmort253