Sobes.tech
Middle

Mi az a transient a C# programozás kontextusában?

sobes.tech MI

Válasz az MI-től

A C#-ban a transient leggyakrabban az objektumok szekvencializációs és deszekvencializációs mechanizmusainál fordul elő.

A [NonSerialized] módosító (vagy [IgnoreDataMember] a DataContractSerializer használatakor, vagy [JsonIgnore] az Json.NET használatakor) egy osztály mezőjét vagy tulajdonságát jelöli, amely nem kerül bele a adatfolyamba az objektum szekvencializálásakor.

Más szóval, ilyen mező vagy tulajdonság "átmeneti" vagy "ideiglenes" és értéke nem kerül mentésre az objektum szekvencializálásakor (például XML, JSON, bináris formátumba). Az objektum későbbi deszekvencializálásakor ezek a mezők/tulajdonságok az alapértelmezett értékekkel inicializálódnak (például null referencia típusoknál, 0 numerikus típusoknál, false bool típusnál).

Fő példák a használatra:

  • Gyorsítótárazott vagy származtatott adatok, amelyeket újraszámolhatunk a deszekvencializálás után.
  • Operációs rendszer erőforrásaira vagy külső objektumokra mutató hivatkozások, amelyeket nem lehet szekvencializálni.
  • Ideiglenes állapotok vagy közbenső számítások.

Példa [NonSerialized]-tel:

using System;
using System.Runtime.Serialization;

[Serializable] // BinaryFormatter-hez szükséges
public class Person
{
    public string Name { get; set; }

    [NonSerialized] // Ez a mező kihagyásra kerül a szekvencializálás során
    public int Age;

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