Свойства интерфейса (Руководство по программированию на 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