0Pricing
C# Academy · Lezione

Struct: semantica dei valori e pattern di immutabilità

Comprenda la semantica dei valori degli struct in C# 6 e costruisca un pattern di struct immutabile (copia su modifica).

Struct: semantica dei valori e pattern di immutabilità è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 1 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 3 lezioni in totale.

Panoramica sulle struct

Obiettivo: Usare le struct in modo sicuro.

  • Semantica dei valori (copia in caso di assegnazione)
  • Schema di struct immutabile in C# 6
  • Passaggio per valore e per riferimento
  • Nota sul boxing

Semantica della copia

Le struct sono tipi valore: l'assegnazione crea una copia. Modificare la copia non modifica l'originale.

using System;

// Simple struct with public fields for demo (okay for small POD data)
public struct Point
{
  public int X;
  public int Y;
}

public class Program
{
  public static void Main(string[] args)
  {
    Point a = new Point();
    a.X = 1; a.Y = 2;

    Point b = a;     // copy the value
    b.X = 9;         // change the copy

    Console.WriteLine("a=(" + a.X + "," + a.Y + ")");
    Console.WriteLine("b=(" + b.X + "," + b.Y + ")"); // different from a
  }
}

Schema di struct immutabile

Preferisca le struct immutabili: campi readonly, un costruttore per lo stato obbligatorio e piccoli helper With per creare nuovi valori.

using System;

// Immutable struct pattern (C# 6): readonly fields + constructor + With method
public struct Money
{
  private readonly decimal _amount;
  private readonly string _currency;

  public decimal Amount { get { return _amount; } }
  public string Currency { get { return _currency; } }

  public Money(decimal amount, string currency)
  {
    _amount = amount;
    _currency = currency ?? "USD";
  }

  // Copy-on-change: returns a new value with updated amount
  public Money WithAmount(decimal amount)
  {
    return new Money(amount, _currency);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Money m1 = new Money(10m, "USD");
    Money m2 = m1.WithAmount(15m); // new value

    Console.WriteLine("m1: " + m1.Amount + " " + m1.Currency);
    Console.WriteLine("m2: " + m2.Amount + " " + m2.Currency);
  }
}

Per valore e per riferimento

I metodi ricevono una copia per impostazione predefinita. Usi ref per modificare la struct del chiamante.

using System;

public struct Counter
{
  public int Value;
}

public class Program
{
  static void IncrementByValue(Counter c)
  {
    c.Value = c.Value + 1; // changes only the local copy
  }

  static void IncrementByRef(ref Counter c)
  {
    c.Value = c.Value + 1; // changes the caller's variable
  }

  public static void Main(string[] args)
  {
    Counter a = new Counter();
    IncrementByValue(a);
    Console.WriteLine("After by-value: " + a.Value); // 0

    IncrementByRef(ref a);
    Console.WriteLine("After by-ref: " + a.Value);   // 1
  }
}

Basi del boxing

Il boxing copia una struct in un riferimento a un oggetto o a un'interfaccia. L'unboxing crea un'altra copia.

using System;

public interface IShow { string Show(); }

public struct Temperature : IShow
{
  public int C;
  public string Show() { return C + "C"; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Temperature t = new Temperature();
    t.C = 25;

    object boxed = t;              // boxing: copy into object
    Temperature copy = (Temperature)boxed; // unbox (another copy)
    copy.C = 30;

    Console.WriteLine("t = " + t.C);     // 25
    Console.WriteLine("copy = " + copy.C); // 30
  }
}

Suggerimenti sulle struct

Suggerimenti:

  • Usi le struct per piccoli oggetti valore immutabili, ad esempio coordinate e denaro.
  • Eviti struct grandi o altamente mutabili.
  • Ricordi che le copie vengono create durante l'assegnazione e il passaggio per valore.
  • Presti attenzione al boxing quando esegue il cast a object o interface.

Semantica dei valori delle struct

Verifica rapida: quale descrizione rappresenta meglio la semantica dei valori di una struct in C#?

Riepilogo

Riepilogo: Le struct sono tipi valore. Preferisca progetti piccoli e immutabili (costruttore + campi readonly + With). Comprenda come il passaggio per valore rispetto a ref e il boxing influenzino le copie.

Domande Frequenti

La lezione «Struct: semantica dei valori e pattern di immutabilità» è gratuita?

Sì — il testo completo di «Struct: semantica dei valori e pattern di immutabilità» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 3 lezioni in totale.

Cosa imparerò in «Struct: semantica dei valori e pattern di immutabilità»?

Comprenda la semantica dei valori degli struct in C# 6 e costruisca un pattern di struct immutabile (copia su modifica). Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C# Academy?

Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 3.

Quanto tempo richiede la lezione «Struct: semantica dei valori e pattern di immutabilità»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C# Academy?

Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Struct: semantica dei valori e pattern di immutabilità
  2. Tipi simili ai record ed equivalenza basata sul valore (pattern)
  3. Enum e [Flags]
← Torna a C# Academy