Sì, puoi farlo, ma devi tenere a mente un paio di cose.
Il primo è che un tipo di valore (struct) è memorizzato nello stack (spesso, non sempre, vedi thread di commenti), piuttosto che l'heap. Lo stack è di dimensioni limitate e gli oggetti di grandi dimensioni non devono essere memorizzati su di esso. Detto questo, c'è un piccolo vantaggio in termini di prestazioni per l'archiviazione delle variabili nello stack.
Il prossimo è che un tipo di valore è passato come argomento del metodo verrà copiato, piuttosto che referenziato. Questa può essere una buona cosa. Almeno sai che la tua variabile non verrà modificata dal metodo. Tuttavia, la copia viene archiviata nello stack, quindi fai attenzione. Inoltre, a volte vuoi che un metodo sia in grado di modificare i contenuti del tuo oggetto.
Infine, è necessario sapere che gli oggetti di riferimento all'interno di una struttura sono solo puntatori agli oggetti nell'heap. Quindi, se modifichi il contenuto di una di queste classi (a meno che, come una stringa, siano codificate per essere immutabili), intendi influenzare il contenuto del tuo stesso oggetto, anche se è presumibilmente immutabile. Questo può essere molto confuso.
Non appena hai detto che alcuni dei contenuti sono oggetti di riferimento, ho pensato "Mi limiterei a un corso."
Come regola generale:
- Utilizza solo le strutture per contenere altri oggetti immutabili.
- Utilizza solo le strutture per piccole raccolte di dati.
- Utilizza solo le strutture in cui la modifica di un elemento al suo interno probabilmente cambierà tutte le altre.
Prendi un indirizzo come buon esempio:
- Tutti i contenuti sono stringhe e quindi immutabili.
- Sono solo una mezza dozzina di indicatori.
- Anche se potresti rimanere nello stesso codice postale, ad esempio, se ti trasferisci a casa, probabilmente cambierai l'intero indirizzo.