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;
    }
}