根据为什么我们不允许在接口中指定构造函数的答案?,
因为接口描述了行为.构造函数不是行为.如何构建对象是一个实现细节.
如果interface描述行为,为什么interface允许声明状态?
public interface IStateBag
{
object State { get; }
}
Run Code Online (Sandbox Code Playgroud)
And*_*are 11
嗯 - 它不是真正的状态.如果接口允许您声明字段,那么这将是状态.由于属性只是get和set方法的语法糖,因此允许使用.
这是一个例子:
interface IFoo
{
Object Foo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
先前的接口被编译为以下IL:
.class private interface abstract auto ansi IFoo
{
.property instance object Foo
{
.get instance object IFoo::get_Foo()
.set instance void IFoo::set_Foo(object)
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,即使接口将属性视为方法.
属性不是实现.例如,您无法定义字段.属性和事件实际上只是特殊的方法模式; 使用属性它是"get_"和"set_",并使用事件"add_"和"remove_".
所以这只是一种方法.