Propiedades de interfaces (Guía de programación de C#)

Las propiedades se pueden declarar en una interfaz. En el ejemplo siguiente se declara un descriptor de acceso de propiedad de interfaz:

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

Normalmente, las propiedades de interfaz no tienen un cuerpo. Los descriptores de acceso indican si la propiedad es de lectura y escritura, de solo lectura o de solo escritura. A diferencia de las clases y las estructuras, la declaración de los descriptores de acceso sin cuerpo no declara una propiedad implementada automáticamente. Una interfaz puede definir una implementación predeterminada para los miembros, incluidas las propiedades. La definición de una implementación predeterminada para una propiedad en una interfaz es poco frecuente, ya que las interfaces no pueden definir campos de datos de instancia.

Ejemplo

En este ejemplo, la interfaz IEmployee tiene una propiedad de lectura y escritura, Name, y una propiedad de solo lectura, Counter. La clase Employee implementa la interfaz IEmployee y usa estas dos propiedades. El programa lee el nombre de un nuevo empleado y el número actual de empleados y muestra el nombre del empleado y el número de empleados calculado.

Puede usar el nombre completo de la propiedad, que hace referencia a la interfaz en la que se declara el miembro. Por ejemplo:

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

En el ejemplo anterior se muestra la implementación de interfaz explícita. Por ejemplo, si la clase Employee implementa dos interfaces ICitizen y IEmployee, y ambas interfaces tienen la propiedad Name, la implementación del miembro de interfaz explícita será necesaria. Es decir, la siguiente declaración de propiedad:

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

implementa la propiedad Name en la interfaz IEmployee, mientras que la siguiente declaración:

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

implementa la propiedad Name en la interfaz 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);

Salida de ejemplo

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 también