Dela via


Gränssnittsegenskaper (C#-programmeringsguide)

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

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

Gränssnittsegenskaper har vanligtvis ingen kropp. Åtkomstmetoderna anger om egenskapen är skrivbar och läsbar, endast läsbar, eller endast skrivbar. Till skillnad från i klasser och strukturer innebär att deklarera accessorer utan en brödtext inte att en automatiskt implementerad egenskap deklareras. 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 inte kan definiera instansdatafält.

Exempel

I det här exemplet har gränssnittet IEmployee en läs- och skrivbar 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, och båda gränssnitten har egenskapen Name, är det nödvändigt med en explicit implementering av gränssnittsmedlemmen. Det vill säga, följande egenskapsdeklaration:

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

Implementerar Name egenskapen i IEmployee gränssnittet och 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: {e1.Counter}");
System.Console.WriteLine($"Employee name: {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