2012-12-22 9 views
7

mi sono imbattuto in un paio di modi per scrivere la logica di business in asp.net, ma mi chiedo per 2 riportato di seguito, quali sono i vantaggi di utilizzare una struct per memorizzare le variabili di classe:business class logica

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 ... 
    } 
} 

risposta

5

Come dsimcha Uniti in their answer here:

Ogni volta che non è necessario il polimorfismo, vogliono semantica di valore, e vogliono a evitare l'allocazione dell'heap e il relativo overhead della raccolta dati obsoleti . L'avvertenza, tuttavia, è che le strutture (arbitrariamente grandi) sono più costose da trasferire rispetto ai riferimenti di classe (di solito una parola di macchina ), quindi le classi potrebbero risultare più veloci nella pratica.

Come JoshBerke Uniti in his answer here:

Utilizzare una struttura quando si desidera semantica di valore al contrario di riferimento semantica.

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

1.7 struct

Come classi, struct sono strutture di dati che possono contenere dati membri e funzionali, ma a differenza di classi, struct sono valore tipi e non richiedono l'allocazione dell'heap. Una variabile di tipo struct memorizza direttamente i dati della struct, mentre una variabile di un tipo di classe memorizza un riferimento a un oggetto allocato dinamicamente. I tipi di Stringa non supportano l'ereditarietà specificata dall'utente e tutti i tipi di struttura ereditano implicitamente dall'oggetto tipo.

Le strutture sono particolarmente utili per strutture di dati di piccole dimensioni con semantica di valore . Numeri complessi, punti in un sistema di coordinate o coppie di valori-chiave in un dizionario sono tutti buoni esempi di strutture. L'uso di strutture anziché di classi per strutture di dati di piccole dimensioni può rendere una grande differenza nel numero di allocazioni di memoria eseguite da un'applicazione . Ad esempio, il seguente programma crea e inizializza un array di 100 punti. Con Point implementato come classe, 101 oggetti separati vengono istanziati, uno per l'array e uno per i 100 elementi.

+0

Grazie per la chiara spiegazione. – k80sg

+10

Plagio: il primo paragrafo viene copiato all'ingrosso da [Quando utilizzare struct in C#?] (Http://stackoverflow.com/q/521298) –

+4

Anche con tutte le modifiche, non c'è ancora nessun materiale * originale * di alcun tipo . – jmort253

Problemi correlati