Schnittstelleneigenschaften (C#-Programmierhandbuch)

Eigenschaften können für eine Schnittstelle deklariert werden. Im folgenden Beispiel wird eine Zugriffsmethode für Schnittstelleneigenschaften deklariert:

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

Schnittstelleneigenschaften verfügen in der Regel über keinen Text. Die Zugriffsmethoden geben an, ob Lese-/Schreibzugriff auf die Eigenschaft besteht oder ob sie schreib- oder lesegeschützt ist. Anders als bei Klassen und Strukturen wird beim Deklarieren von Zugriffsmethoden ohne Text keine automatisch implementierte Eigenschaft deklariert. Eine Schnittstelle kann eine Standardimplementierung für Member definieren, darunter auch für Eigenschaften. Standardimplementierungen für Eigenschaften in einer Schnittstelle sind selten, weil Schnittstellen möglicherweise keine Instanzdatenfelder definieren.

Beispiel

In diesem Beispiel besitzt die Schnittstelle IEmployee eine Lese-/Schreibzugriff-Eigenschaft Name und eine Lesezugriff-Eigenschaft Counter. Die Klasse Employee implementiert die Schnittstelle IEmployee und verwendet diese beiden Eigenschaften. Der Name eines neuen Mitarbeiters und die aktuelle Anzahl der Mitarbeiter werden vom Programm gelesen, und der Mitarbeitername sowie die berechnete Mitarbeiteranzahl werden angezeigt.

Sie können den vollqualifizierten Namen der Eigenschaft verwenden, der auf die Schnittstelle verweist, in der der Member deklariert wird. Zum Beispiel:

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

Im vorangehenden Beispiel wird die Explizite Schnittstellenimplementierung veranschaulicht. Wenn z.B. die Klasse Employee die beiden Schnittstellen ICitizen und IEmployee implementiert und beide Schnittstellen die Eigenschaft Name besitzen, ist die explizite Implementierung des Schnittstellenmembers erforderlich. Das bedeutet, dass die folgende Eigenschaftendeklaration:

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

die Eigenschaft Name für die Schnittstelle IEmployee implementiert. Dahingegen implementiert die folgende Deklaration:

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

die Eigenschaft Name für die Schnittstelle 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);

Beispielausgabe

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

Weitere Informationen