Utilizzo pratico delle strutture in c # [duplicato]

0

Mentre lavoriamo in OOP, combattiamo sempre attorno a strutture e classi.

Ma nel mondo reale, ci atteniamo sempre alle lezioni. Voglio solo sapere qual è l'uso pratico delle strutture in C # e dove sono vantaggiose rispetto alle classi.

O sono solo un argomento di teoria.

    
posta MegaMind 06.12.2012 - 13:33
fonte

4 risposte

4

Le strutture sono ideali per rappresentare i tipi di valore. Cose come date, intervalli, numeri; roba in cui l'uguaglianza dipende dal valore dell'oggetto piuttosto che dall'istanza dell'oggetto. Sono utili per i messaggi e alcuni altri componenti in un programma concorrente, poiché la semantica della copia rende molto puliti alcuni aspetti di questo tipo di progettazione.

Ma è piuttosto nella loro definizione. In practice , vengono utilizzati più spesso come una mappa per alcuni dati su disco, o da qualche altra fonte esterna poiché è possibile creare delle strutture per avere regole su come sono disposte e impacchettate nella memoria. Quindi, invece di leggere un array di byte e fare il parsing di te stesso, puoi eseguire il marshalling della struttura tutto in una volta, lasciando che il runtime faccia le cose soggette a errori.

    
risposta data 06.12.2012 - 13:45
fonte
0

In C #, le strutture sono tipi di valore, mentre le classi sono tipi di riferimento.
Quindi usi una struct ogni volta che viene richiesto un tipo di valore, e una classe se un tipo di riferimento è più pratico.

Questo è tutto ciò che c'è da fare.

    
risposta data 06.12.2012 - 14:25
fonte
0

La mia regola empirica potrebbe essere sbagliata:

Direi che una struttura è l'equivalente di tipizzazione strong e statico di una tupla. Usalo quando ogni possibile combinazione di valori nella struttura è valida e ugualmente ragionevole.

Al contrario, le classi hanno un insieme limitato di stati validi e hanno setter e getter più complessi, che potrebbero dover fare anche la convalida.

    
risposta data 06.12.2012 - 14:50
fonte
0

In C # si è costretti ad allocare oggetti sull'heap e ad indicarli con un puntatore. Le strutture ti permettono di mettere "oggetti" in pila. L'allocazione di un valore sullo stack anziché su un puntatore influisce sui controlli di uguaglianza, garbage collection e velocità di allocazione.

C # si mescola in una decisione heap vs stack. In C ++ puoi fare l'opposto di C # se lo desideri e mettere una classe nello stack e strutturare l'heap. Con C ++ si tratta di progettare scelte sul polimorfismo piuttosto che sulla decisione di allocazione della memoria che C # ti costringe.

    
risposta data 06.12.2012 - 15:02
fonte

Leggi altre domande sui tag