Gränssnittsegenskaper (C#-programmeringsguide)

Egenskaper kan deklareras i ett gränssnitt. I följande exempel deklareras en gränssnittsegenskapsåtkomst:

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

Gränssnittsegenskaper har vanligtvis ingen brödtext. Åtkomsterna anger om egenskapen är skrivskyddad, skrivskyddad eller skrivskyddad. Till skillnad från i klasser och structs deklarerar inte att åtkomsterna utan en brödtext deklarerar en automatiskt implementerad egenskap. Ett gränssnitt kan definiera en standardimplementering för medlemmar, inklusive egenskaper. Det är ovanligt att definiera en standardimplementering för en egenskap i ett gränssnitt eftersom gränssnitt kanske inte definierar instansdatafält.

Exempel

I det här exemplet har gränssnittet IEmployee en skrivskyddad egenskap, Name, och en skrivskyddad egenskap, Counter. Klassen Employee implementerar IEmployee gränssnittet och använder dessa två egenskaper. Programmet läser namnet på en ny anställd och det aktuella antalet anställda och visar medarbetarens namn och det beräknade antalet anställda.

Du kan använda det fullständigt kvalificerade namnet på egenskapen, som refererar till gränssnittet där medlemmen deklareras. Till exempel:

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

Föregående exempel visar explicit gränssnittsimplementering. Om klassen Employee till exempel implementerar två gränssnitt ICitizen och IEmployee båda gränssnitten Name har egenskapen krävs den explicita implementeringen av gränssnittsmedlemmen. Det vill: följande egenskapsdeklaration:

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

implementerar Name egenskapen i IEmployee gränssnittet, medan följande deklaration:

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

implementerar egenskapen Name i ICitizen gränssnittet.

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);

Exempelutdata

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

Se även