Propriedades de interface (Guia de Programação em C#)

As propriedades podem ser declaradas em uma interface. O exemplo a seguir declara um acessador de propriedade de interface:

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

As propriedades da interface normalmente não têm um corpo. Os acessadores indicam se a propriedade é leitura/gravação, somente leitura ou somente gravação. Ao contrário de classes e structs, declarar os acessadores sem um corpo não declara uma propriedade implementada automaticamente. Uma interface pode definir uma implementação padrão para membros, incluindo propriedades. Definir uma implementação padrão para uma propriedade em uma interface é raro porque as interfaces podem não definir campos de dados de instância.

Exemplo

Neste exemplo, a interface IEmployee tem uma propriedade de leitura/gravação, Name e uma propriedade somente leitura, Counter. A classe Employee implementa a interface IEmployee e usa essas duas propriedades. O programa lê o nome de um novo funcionário e o número atual de funcionários e exibe o nome do funcionário e o número do funcionário computado.

Seria possível usar o nome totalmente qualificado da propriedade, que referencia a interface na qual o membro é declarado. Por exemplo:

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

O exemplo anterior demonstra a Implementação explícita da interface. Por exemplo, se a classe Employee estiver implementando duas interfaces ICitizen e IEmployee e as duas interfaces tiverem a propriedade Name, será necessária a implementação explícita de membro da interface. Ou seja, a seguinte declaração de propriedade:

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

implementa a propriedade Name na interface IEmployee, enquanto a seguinte declaração:

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

implementa a propriedade Name na interface 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);

Saída de exemplo

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

Confira também