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, Name
e 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