C# Propriété

Les propriétés en C# sont des membres des classes et des structures qui servent à encapsuler des données. Elles permettent de définir des règles d'accès et d'affectation pour les membres d'une classe et sont généralement utilisées pour masquer les détails d'implémentation interne des champs tout en fournissant un mécanisme de contrôle de l'accès aux données.

Une propriété peut être considérée comme un wrapper autour d’un champ, généralement constitué d’accesseurs get et set.

Les propriétés ne déterminent pas les emplacements de stockage. Au lieu de cela, elles ont des accesseurs qui peuvent lire, écrire ou calculer leurs valeurs.Accesseurs。

Par exemple, il existe une classe nommée Student avec des champs privés age, name et code. Nous ne pouvons pas accéder directement à ces champs en dehors de la classe, mais nous pouvons avoir des propriétés qui accèdent à ces champs privés.

Syntaxe de base

public class Person
{
    private string name;

    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}

Dans le code ci-dessus,NameLes propriétés encapsulent les champs privés.name。getUn accesseur est utilisé pour obtenir la valeur d’un champ, tandis quesetun accesseur est utilisé pour définir la valeur d’un champ.

Propriétés auto-implémentées

Si vous avez seulement besoin d’une propriété simple, C# vous permet d’utiliser des propriétés auto-implémentées, donc vous n’avez pas besoin de définir explicitement un champ.

public class Person
{
    public string Name { get; set; }
}

Dans ce cas, le compilateur génère automatiquement un champ anonyme privé pour la propriété Name afin de stocker la valeur.

Propriété en lecture seule

Si vous avez seulement besoin d’une propriété en lecture seule, vous pouvez omettre l’accesseur set.

public class Person
{
    public string Name { get; }

    public Person(string name)
    {
        Name = name;
    }
}

Propriété en écriture seule

De même, si vous n'avez besoin que d'une propriété en écriture seule, vous pouvez omettre l'accesseur get.

public class Person
{
    private string name;

    public string Name
    {
        set { name = value; }
    }
}

Logique personnalisée

Vous pouvez inclure une logique personnalisée dans les accesseurs get et set.

public class Person
{
    private string name;

    public string Name
    {
        get { return name; }
        set
        {
            if (string.IsNullOrWhiteSpace(value))
                throw new ArgumentException("Name cannot be empty.");
            name = value;
        }
    }
}

Propriété calculée

Les propriétés peuvent également être calculées et ne dépendent pas des champs.

public class Rectangle
{
    public int Width { get; set; }
    public int Height { get; set; }

    public int Area
    {
        get { return Width * Height; }
    }
}

Accesseurs

de la propriétéAccesseurLes accesseurs contiennent des instructions exécutables qui aident à obtenir (lire ou calculer) ou définir (écrire) la propriété. Une déclaration d'accesseur peut contenir un accesseur get, un accesseur set, ou les deux. Par exemple :

// Déclare la propriété Code de type string
public string Code
{
   get
   {
      return code;
   }
   set
   {
      code = value;
   }
}

// Déclare la propriété Name de type string
public string Name
{
   get
   {
     return name;
   }
   set
   {
     name = value;
   }
}

// Déclarer une propriété Age de type int
public int Age
{
   get
   {
      return age;
   }
   set
   {
      age = value;
   }
}

Exemple

L'exemple suivant illustre l'utilisation des propriétés :

Exemple

using System;
namespace example
{
   class Student
   {

      private string code = "N.A";
      private string name = "inconnu";
      private int age = 0;

      // Déclare la propriété Code de type string
      public string Code
      {
         get
         {
            return code;
         }
         set
         {
            code = value;
         }
      }
   
      // Déclare la propriété Name de type string
      public string Name
      {
         get
         {
            return name;
         }
         set
         {
            name = value;
         }
      }

      // Déclarer une propriété Age de type int
      public int Age
      {
         get
         {
            return age;
         }
         set
         {
            age = value;
         }
      }
      public override string ToString()
      {
         return "Code = " + Code +", Nom = " + Name + ", Âge = " + Âge;
      }
    }
    class ExampleDemo
    {
      public static void Main()
      {
         // Créer un nouvel objet Student
         Student s = new Student();
           
         // Définir le code, le nom et l'âge de l'étudiant
         s.Code = "001";
         s.Name = "Zara";
         s.Âge = 9;
         Console.WriteLine("Informations sur l'étudiant : {0}", s);
         // Incrémenter l'âge
         s.Âge += 1;
         Console.WriteLine("Informations sur l'étudiant : {0}", s);
         Console.ReadKey();
       }
   }
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :

Student Info: Code = 001, Name = Zara, Age = 9
Student Info: Code = 001, Name = Zara, Age = 10

Propriétés abstraites

Les classes abstraites peuvent avoir des propriétés abstraites, qui doivent être implémentées dans les classes dérivées. Le programme suivant illustre cela :

Exemple

using System;
namespace Example
{
    public abstract class Person
    {
        public abstract string Name { get; set; }
        public abstract int Age { get; set; }
    }

    class Student : Person
    {
        // Déclarer une propriété auto-implémentée
        public string Code { get; set; } = "N.A";
        public override string Name { get; set; } = "N.A";
        public override int Age { get; set; } = 0;

        public override string ToString()
        {
            return $"Code = {Code}, Name = {Name}, Age = {Age}";
        }
    }

    class ExampleDemo
    {
        public static void Main()
        {
            // Créer un nouvel objet Student
            Student s = new Student
            {
                Code = "001",
                Name = "Zara",
                Âge = 9
            };

            Console.WriteLine("Informations sur l'étudiant :- {0}", s);
           
            // Incrémenter l'âge
            s.Âge += 1;
            Console.WriteLine("Informations sur l'étudiant :- {0}", s);

            Console.ReadKey();
        }
    }
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :

Student Info: Code = 001, Name = Zara, Age = 9
Student Info: Code = 001, Name = Zara, Age = 10
autres extensions