Propriedades da 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 não podem definir campos de dados de instância.

Exemplo

Neste exemplo, a interface IEmployee tem uma propriedade read-write, Namee uma propriedade somente leitura, Counter. A classe Employee implementa a IEmployee interface 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 de funcionário calculado.

Você pode usar o nome totalmente qualificado da propriedade, que faz referência à interface na qual o membro é declarado. Por exemplo:

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

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

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

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

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

Implementa a Name propriedade na ICitizen interface.

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

Consulte também