Proprietà dell'interfaccia (Guida per programmatori C#)

Le proprietà possono essere dichiarate su una interfaccia. Nell'esempio seguente viene dichiarata una funzione di accesso alle proprietà di interfaccia:

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

Le proprietà dell'interfaccia in genere non hanno un corpo. Le funzioni di accesso indicano se la proprietà è di sola lettura, di sola lettura o di sola scrittura. A differenza di classi e struct, la dichiarazione delle funzioni di accesso senza un corpo non dichiara una proprietà implementata automaticamente. Un'interfaccia può definire un'implementazione predefinita per i membri, incluse le proprietà. La definizione di un'implementazione predefinita per una proprietà in un'interfaccia è rara perché le interfacce potrebbero non definire campi dati dell'istanza.

Esempio

Nell'esempio seguente l'interfaccia IEmployee include una proprietà in lettura-scrittura, Name, e una proprietà in sola lettura, Counter. La classe Employee implementa l'interfaccia IEmployee e usa le due proprietà. Il programma legge il nome di un nuovo dipendente e il numero corrente di dipendenti e quindi visualizza il nome del dipendente e il relativo numero calcolato.

È possibile usare il nome completo della proprietà, che fa riferimento all'interfaccia in cui il membro è dichiarato. Ad esempio:

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

L'esempio precedente illustra l'implementazione esplicita dell'interfaccia. Se la classe Employee implementa, ad esempio, due interfacce, ICitizen e IEmployee, ed entrambe le interfacce includono la proprietà Name, sarà necessaria l'implementazione esplicita del membro dell'interfaccia. In altre parole, la dichiarazione di proprietà seguente:

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

implementa la proprietà Name nell'interfaccia IEmployee, mentre la dichiarazione seguente:

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

implementa la proprietà Name nell'interfaccia 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);

Output di esempio

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

Vedi anche