接口属性(C# 编程指南)

可以在接口上声明属性。 下面的示例声明一个接口属性访问器:

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

接口属性通常没有主体。 访问器指示属性是读写、只读还是只写。 与在类和结构中不同,在没有主体的情况下声明访问器不会声明自动实现的属性。 接口可为成员(包括属性)定义默认实现。 在接口中为属性定义默认实现的情况非常少,因为接口可能不会定义实例数据字段。

示例

在此示例中,接口 IEmployee 具有读写属性 Name 和只读属性 Counter。 类 Employee 实现 IEmployee 接口,并使用这两个属性。 程序读取新员工的姓名以及当前员工数,并显示员工名称和计算的员工数。

可以使用属性的完全限定名称,它引用其中声明成员的接口。 例如:

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

前面的示例演示了如何显式接口实现。 例如,如果 Employee 类正在实现接口 ICitizen 和接口 IEmployee,而这两个接口都具有 Name 属性,则需要用到显式接口成员实现。 即是说下列属性声明:

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

IEmployee 接口中实现 Name 属性,而以下声明:

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

ICitizen 接口中实现 Name 属性。

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

示例输出

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

另请参阅