例如,假设我想要一个ICar接口,并且所有实现都将包含field Year。这是否意味着每个实现都必须单独声明Year?在界面中简单定义它会更好吗?
ICar
Year
尽管许多其他答案在语义级别上都是正确的,但我发现从实现细节级别也解决此类问题很有趣。
接口可以看作是 插槽 的集合,其中包含 方法 。当类实现接口时,需要该类告诉运行时如何填写所有必需的插槽。当你说
interface IFoo { void M(); } class Foo : IFoo { public void M() { ... } }
班级说:“当您创建我的实例时,请在IFoo.M的插槽中填充对Foo.M的引用。
然后,当您拨打电话时:
IFoo ifoo = new Foo(); ifoo.M();
编译器生成的代码表明“向对象询问IFoo.M插槽中的方法是什么,然后调用该方法。
如果接口是包含方法的插槽的集合,那么这些插槽中的一些也可以包含属性的get和set方法,索引器的get和set方法以及事件的add和remove方法。但是 领域不是方法 。没有与该字段关联的“插槽”,然后您可以通过引用该字段位置来“填写”。因此,接口可以定义方法,属性,索引器和事件,但不能定义字段。