Właściwości interfejsu (Przewodnik programowania w języku C#)

Właściwości można zadeklarować w interfejsie. Poniższy przykład deklaruje metodę dostępu właściwości interfejsu:

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

Właściwości interfejsu zwykle nie mają treści. Metody dostępu wskazują, czy właściwość jest tylko do odczytu i zapisu, tylko do odczytu, czy tylko do zapisu. W przeciwieństwie do klas i struktur deklarowanie metod dostępu bez treści nie deklaruje właściwości zaimplementowanej automatycznie. Interfejs może definiować domyślną implementację elementów członkowskich, w tym właściwości. Definiowanie domyślnej implementacji właściwości w interfejsie jest rzadkie, ponieważ interfejsy mogą nie definiować pól danych wystąpienia.

Przykład

W tym przykładzie interfejs IEmployee ma właściwość read-write, Namei właściwość tylko do odczytu, Counter. Klasa Employee implementuje IEmployee interfejs i używa tych dwóch właściwości. Program odczytuje nazwę nowego pracownika i bieżącą liczbę pracowników oraz wyświetla nazwę pracownika oraz obliczony numer pracownika.

Można użyć w pełni kwalifikowanej nazwy właściwości, która odwołuje się do interfejsu, w którym element członkowski jest zadeklarowany. Na przykład:

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

W poprzednim przykładzie pokazano implementację jawnego interfejsu. Jeśli na przykład klasa Employee implementuje dwa interfejsy, a IEmployee oba interfejsy ICitizen mają Name właściwość , wymagana będzie jawna implementacja składowa interfejsu. Oznacza to, że następująca deklaracja właściwości:

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

implementuje Name właściwość w interfejsie IEmployee , podczas gdy następująca deklaracja:

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

implementuje Name właściwość w interfejsie 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);

Przykładowe dane wyjściowe

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

Zobacz też