Sobes.tech
Middle

Какво е transient в контекста на програмирането на C#?

sobes.tech AI

Отговор от AI

В контекста на C# transient най-често се среща при работа с механизми за сериализация и десериализация на обекти.

Модификаторът [NonSerialized] (или [IgnoreDataMember] при използване на DataContractSerializer, или атрибутът [JsonIgnore] при използване на Json.NET) се използва за маркиране на поле или свойство на клас, което не трябва да бъде включено в потока от данни по време на сериализация на обекта.

С други думи, такова поле или свойство е "преходно" или "временен" и неговата стойност не се запазва при преобразуване на обекта във последователен формат (например XML, JSON, двоичен). При последваща десериализация на обекта, тези полета/свойства ще бъдат инициализирани със стойностите по подразбиране за техния тип (например, null за референтни типове, 0 за числови, false за bool).

Основни примери за използване:

  • Кеширани или производни данни, които могат да бъдат пресмятани след десериализация.
  • Връзки към ресурси на операционната система или външни обекти, които не могат да бъдат сериализирани.
  • Временни състояния или междинни изчисления.

Пример с [NonSerialized]:

using System;
using System.Runtime.Serialization;

[Serializable] // Необходимо за BinaryFormatter
public class Person
{
    public string Name { get; set; }

    [NonSerialized] // Това поле ще бъде пропуснато при сериализация
    public int Age;

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