大家好,
Jon Skeet has answered to a question that Using a property is backed by a variable.
但是C#中允许接口中的属性。这是否意味着C#中的接口可以包含一个变量以及该属性支持的变量将如何处理?
提前致谢。
答案 0 :(得分:24)
没有。界面不能包含字段。
接口可以声明一个Property,但它不提供任何实现,因此没有后备字段。只有在类实现接口时才需要支持字段(或自动属性)。
答案 1 :(得分:22)
接口可以是命名空间或类的成员,并且可以包含以下成员的签名:
Methods
Properties
Indexers
Events
可以在接口上声明属性。声明采用以下形式: interface属性的访问者没有正文。
因此,访问器的目的是指示属性是读写,只读还是只写。
示例:
// Interface Properties
interface IEmployee
{
string Name
{
get;
set;
}
int Counter
{
get;
}
}
实施:
public class Employee: IEmployee
{
public static int numberOfEmployees;
private int counter;
private string name;
// Read-write instance property:
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
// Read-only instance property:
public int Counter
{
get
{
return counter;
}
}
// Constructor:
public Employee()
{
counter = ++counter + numberOfEmployees;
}
}
MainClass:
public class MainClass
{
public static void Main()
{
Console.Write("Enter number of employees: ");
string s = Console.ReadLine();
Employee.numberOfEmployees = int.Parse(s);
Employee e1 = new Employee();
Console.Write("Enter the name of the new employee: ");
e1.Name = Console.ReadLine();
Console.WriteLine("The employee information:");
Console.WriteLine("Employee number: {0}", e1.Counter);
Console.WriteLine("Employee name: {0}", e1.Name);
}
}
答案 2 :(得分:3)
可以在接口(未定义)上声明属性。但是接口属性的访问者没有正文。因此,访问者的目的是表示该属性是读写,只读还是只写。
如果您在此处查看MSDN Doc,则会在界面中看到未定义属性,而是由继承类完成实现。
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
{
return name;
}
set
{
name = value;
}
}
private int counter;
public int Counter // read-only instance property
{
get
{
return counter;
}
}
public Employee() // constructor
{
counter = ++counter + numberOfEmployees;
}
}
因此,在接口IEmployee
中,属性语法看起来像自动实现的属性,但它们只是指示属性是read-write
,read-only
还是write-only
,而已。它是实现类来执行实现和定义属性的任务。
答案 3 :(得分:2)
不,这并不意味着。该接口实际上包含属性。
请记住,接口必须由类实现才能使用它。接口仅定义契约,这意味着实现该接口的任何类都将具有该接口定义的所有成员。界面实际上没有这些成员;它更像是一个模板。 实现接口的类的实例是包含该属性的实例,因此是用于该属性的私有支持字段。
接口只能为以下成员定义签名:
答案 4 :(得分:2)
不,界面只是“合同”。由实现类实现属性;它可能会也可能不会使用变量来支持它。