Sobes.tech
Middle

Cos'è transient nel contesto della programmazione in C#?

sobes.tech AI

Risposta dell'AI

Nel contesto di C#, transient si trova più comunemente durante il lavoro con meccanismi di serializzazione e deserializzazione di oggetti.

Il modificatore [NonSerialized] (o [IgnoreDataMember] quando si utilizza DataContractSerializer, o l'attributo [JsonIgnore] quando si utilizza Json.NET) viene usato per contrassegnare un campo o una proprietà di una classe che non deve essere inclusa nel flusso di dati durante la serializzazione dell'oggetto.

In altre parole, tale campo o proprietà è "transitorio" o "temporaneo" e il suo valore non viene salvato durante la conversione dell'oggetto in un formato sequenziale (ad esempio, XML, JSON, binario). Durante la successiva deserializzazione dell'oggetto, questi campi/proprietà saranno inizializzati con i valori predefiniti per il loro tipo (ad esempio, null per i tipi di riferimento, 0 per numerici, false per bool).

Esempi principali di utilizzo:

  • Dati in cache o derivati che possono essere ricalcolati dopo la deserializzazione.
  • Riferimenti a risorse di sistema o oggetti esterni che non possono essere serializzati.
  • Stati temporanei o calcoli intermedi.

Esempio con [NonSerialized]:

using System;
using System.Runtime.Serialization;

[Serializable] // Necessario per BinaryFormatter
public class Person
{
    public string Name { get; set; }

    [NonSerialized] // Questo campo sarà ignorato durante la serializzazione
    public int Age;

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
}