Uso di una struct

di il
3 risposte

Uso di una struct

Salve a tutti, sto studiando le struct da un libro c# ma ho dei dubbi che anche cercando online non sono riuscito a soddisfare.

Questo è un estratto della spiegazione di quando utilizzare una struct:
Bisogna utilizzare una struct per gestire poche informazioni di breve durata, devono rappresentare tipi primitivi con dimensione ridotta(in genere 16 byte) e immutabili.

dubbi: all'interno della struct vanno usati tipi primitivi dove ogni tipo non superi i 16 byte? oppure non devo superare in totale 16 byte con i tipi? inoltre come posso capire quanti byte pesa una struttura? cercando online consigliano di usare sizeof oppure marshal.sizeof ma non tutti la pensano alla stessa maniera e non fanno altro che confondermi ancora di più.

Grazie per la vostra attenzione.

3 Risposte

  • Re: Uso di una struct

    "in genere 16 byte"

    e perché mai?

    Che libro è?
  • Re: Uso di una struct

    oregon ha scritto:


    "in genere 16 byte"

    e perché mai?

    Che libro è?
    Ciao oregon, il libro si chiama C# 8 e Visual Studio 2019.
    Comunque la spiegazione completa è questa:
    Quando è opportuno utilizzare una struttura al posto di una classe? Le strutture nascono come tipi orientati a gestire poche informazioni di breve durata, per lo più contenute, a loro volta, in altri oggetti. Esse devono rappresentare principalmente valori singoli o tipi primitivi (per esempio, valori numerici più o meno strutturati, coordinate spaziali, ecc.), caratterizzati da una dimensione ridotta (in genere 16 byte) e immutabili. In tutti gli altri casi vanno usate le classi.
    Ho trovato dalla Docs delle informazioni simili ma comunque mi rimangono i dubbi.
  • Re: Uso di una struct

    STAddo ha scritto:


    dubbi: all'interno della struct vanno usati tipi primitivi dove ogni tipo non superi i 16 byte? oppure non devo superare in totale 16 byte con i tipi?
    Credo si riferisca alla "dimensione ideale" che può essere allocata sullo stack senza degradare troppo le prestazioni, in quanto la differenza principale nell'uso delle struct, rispetto a una class ad esempio, risiede nel fatto che i dati della struttura sono allocati direttamente sullo stack della chiamata, ad esempio quando passi parametri a una funzione, e sono dei Value Types (a differenza degli oggetti che sono Reference Types).

    Senza fartela troppo lunga, quando usi un tipo di dato struct e ne assegni il valore da una variabile a un'altra, oppure assegni il valore a un parametro di un metodo di quel tipo, l'intero contenuto della struttura viene copiato, quindi più campi sono presenti all'interno, maggiore è l'area di memoria da allocare e nella quale trasferire i dati immagazzinati.

    Se la struttura diventa troppo grande, il degrado nell'occupazione ottimale della memoria e/o delle prestazioni (legati alla copia necessaria di tutti i valori) diventa tale per cui conviene trasformarla invece in un oggetto, quindi definirla come class.

    Se guardi in giro, troverai che le struct sono spesso usate per pochi dati che devono stare assieme, tipo la data con l'ora, oppure le coordinate di un punto, o le dimensioni di un riquadro, principalmente campi interi, semplici e in numero ridotto.

    Ciao!
Devi accedere o registrarti per scrivere nel forum
3 risposte