Свойства интерфейса (Руководство по программированию на C#)

Свойства можно объявлять для интерфейса. Следующий пример объявляет метод доступа к свойству интерфейса:

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

Свойства интерфейса обычно не имеют тела. Методы доступа указывают, доступно ли свойство для чтения и записи, только для чтения или только для записи. В отличие от классов и структур, объявление методов доступа без тела не приводит к объявлению автоматически реализуемого свойства. Интерфейс может определить реализацию по умолчанию для членов, включая свойства. Определение реализации по умолчанию для свойства в интерфейсе используется редко, так как интерфейсы могут не определять поля данных экземпляра.

Пример

В этом примере интерфейс IEmployee содержит доступное для чтения и записи свойство Name, а также свойство Counter, предназначенное только для чтения. Класс Employee реализует интерфейс IEmployee и использует эти два свойства. Программа считывает имя нового сотрудника и текущее число сотрудников, после чего отображает имя сотрудника и его рассчитанный номер.

Вы можете использовать полное имя свойства, которое ссылается на интерфейс, где был объявлен член. Например:

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

В предыдущем примере показана явная реализация интерфейса. Например, если класс Employee реализует два интерфейса (ICitizen и IEmployee), оба из которых содержат свойство Name, потребуется явная реализация члена интерфейса. Это значит, что потребуется следующее объявление свойства:

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

реализует свойство Name в интерфейсе IEmployee, тогда как следующее объявление:

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

реализует свойство Name в интерфейсе 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);

Пример полученных результатов

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

См. также