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 :
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
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
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 = 10autres extensions