根据为什么我们不允许在接口中指定构造函数的答案?,
因为接口描述了行为.构造函数不是行为.如何构建对象是一个实现细节.
如果interface
描述行为,为什么interface
允许声明状态?
public interface IStateBag { object State { get; } }
Andrew Hare.. 11
嗯 - 它不是真正的状态.如果接口允许您声明字段,那么这将是状态.由于属性只是get和set方法的语法糖,因此允许使用.
这是一个例子:
interface IFoo { Object Foo { get; set; } }
先前的接口被编译为以下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) } }
如您所见,即使接口将属性视为方法.
嗯 - 它不是真正的状态.如果接口允许您声明字段,那么这将是状态.由于属性只是get和set方法的语法糖,因此允许使用.
这是一个例子:
interface IFoo { Object Foo { get; set; } }
先前的接口被编译为以下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) } }
如您所见,即使接口将属性视为方法.
属性不是实现.例如,您无法定义字段.属性和事件实际上只是特殊的方法模式; 使用属性它是"get_"和"set_",并使用事件"add_"和"remove_".
所以这只是一种方法.