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à dell'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à è in lettura-scrittura, in sola lettura o in sola scrittura. A differenza delle classi e degli 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 non possono definire i 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
, è 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