Delen via


Interface-eigenschappen (C#-programmeerhandleiding)

Eigenschappen kunnen worden gedeclareerd op een interface. In het volgende voorbeeld wordt een toegangsfunctie voor interface-eigenschappen declareren:

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

Interface-eigenschappen hebben doorgaans geen hoofdtekst. De accessors geven aan of de eigenschap alleen-lezen, alleen-lezen of alleen-schrijven is. In tegenstelling tot klassen en structs, declareert het declareren van de accessors zonder hoofdtekst geen automatisch geïmplementeerde eigenschap. Een interface kan een standaard implementatie definiëren voor leden, inclusief eigenschappen. Het definiëren van een standaard implementatie voor een eigenschap in een interface is zeldzaam omdat interfaces geen instantiegegevensvelden kunnen definiëren.

Opmerking

In dit voorbeeld heeft de interface IEmployee een eigenschap lezen/schrijven, Nameen een alleen-lezen eigenschap, Counter. De klasse Employee implementeert de IEmployee interface en gebruikt deze twee eigenschappen. Het programma leest de naam van een nieuwe werknemer en het huidige aantal werknemers en geeft de naam van de werknemer en het berekende werknemersnummer weer.

U kunt de volledig gekwalificeerde naam van de eigenschap gebruiken, die verwijst naar de interface waarin het lid wordt gedeclareerd. Voorbeeld:

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

In het voorgaande voorbeeld ziet u expliciete interface-implementatie. Als de klasse Employee bijvoorbeeld twee interfaces implementeert en IEmployee beide interfaces ICitizen de Name eigenschap hebben, is de expliciete implementatie van het interfacelid nodig. Dat wil gezegd, de volgende eigenschapsdeclaratie:

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

Implementeert de Name eigenschap op de IEmployee interface, terwijl de volgende declaratie:

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

Implementeert de Name eigenschap op de 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);

Voorbeelduitvoer

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

Zie ook