Propriétés d'interface (Guide de programmation C#)

Des propriétés peuvent être déclarées dans une interface. L’exemple suivant déclare un accesseur de propriété d’interface :

public interface ISampleInterface
{
    // Property declaration:
    string Name
    {
        get;
        set;
    }
}

Les propriétés d’interface n’ont pas de corps en général. Les accesseurs indiquent si la propriété est en lecture-écriture, en lecture seule ou en écriture seule. Contrairement aux classes et aux structs, la déclaration des accesseurs sans corps ne déclare pas de propriété implémentée automatiquement. Une interface peut définir une implémentation par défaut pour les membres, notamment les propriétés. La définition d’une implémentation par défaut pour une propriété dans une interface est rare, car les interfaces peuvent ne pas définir de champs de données d’instance.

Exemple

Dans cet exemple, l’interface IEmployee a une propriété en lecture-écriture, Name, et une propriété en lecture seule, Counter. La classe Employee implémente l’interface IEmployee et utilise ces deux propriétés. Le programme lit le nom d’un nouvel employé et le nombre actuel d’employés et affiche le nom de l’employé et le nombre d’employés calculé.

Vous pouvez utiliser le nom qualifié complet de la propriété, qui fait référence à l’interface dans laquelle le membre est déclaré. Par exemple :

string IEmployee.Name
{
    get { return "Employee Name"; }
    set { }
}

L’exemple précédent illustre l’implémentation d’interface explicite. Par exemple, si la classe Employee implémente deux interfaces, ICitizen et IEmployee, et que les deux interfaces ont la même propriété Name, l’implémentation de membre d’interface explicite est nécessaire. Autrement dit, la déclaration de propriété suivante :

string IEmployee.Name
{
    get { return "Employee Name"; }
    set { }
}

implémente la propriété Name dans l’interface IEmployee, alors que la déclaration suivante :

string ICitizen.Name
{
    get { return "Citizen Name"; }
    set { }
}

implémente la propriété Name dans l’interface ICitizen.

interface IEmployee
{
    string Name
    {
        get;
        set;
    }

    int Counter
    {
        get;
    }
}

public class Employee : IEmployee
{
    public static int numberOfEmployees;

    private string _name;
    public string Name  // read-write instance property
    {
        get => _name;
        set => _name = value;
    }

    private int _counter;
    public int Counter  // read-only instance property
    {
        get => _counter;
    }

    // constructor
    public Employee() => _counter = ++numberOfEmployees;
}
System.Console.Write("Enter number of employees: ");
Employee.numberOfEmployees = int.Parse(System.Console.ReadLine());

Employee e1 = new Employee();
System.Console.Write("Enter the name of the new employee: ");
e1.Name = System.Console.ReadLine();

System.Console.WriteLine("The employee information:");
System.Console.WriteLine("Employee number: {0}", e1.Counter);
System.Console.WriteLine("Employee name: {0}", e1.Name);

Exemple de sortie

Enter number of employees: 210
Enter the name of the new employee: Hazem Abolrous
The employee information:
Employee number: 211
Employee name: Hazem Abolrous

Voir aussi