gpt4 book ai didi

c# - 为什么 C# 接口(interface)不能包含字段?

转载 作者:IT王子 更新时间:2023-10-29 03:29:23 24 4
gpt4 key购买 nike

例如,假设我想要一个ICar 接口(interface)并且所有实现都将包含字段Year。这是否意味着每个实现都必须单独声明 Year?在界面中简单地定义它不是更好吗?

最佳答案

虽然许多其他答案在语义层面上是正确的,但我发现从实现细节层面处理这类问题也很有趣。

接口(interface)可以被认为是的集合,其中包含方法。当一个类实现一个接口(interface)时,该类需要告诉运行时如何填充所有需要的槽。当你说

interface IFoo { void M(); } 
class Foo : IFoo { public void M() { ... } }

类说“当你创建一个 me 的实例时,在 IFoo.M 的插槽中填充对 Foo.M 的引用。

然后当你打电话时:

IFoo ifoo = new Foo();
ifoo.M();

编译器生成的代码表示“询问对象 IFoo.M 的插槽中有什么方法,然后调用该方法。

如果接口(interface)是包含方法的槽的集合,那么其中一些槽还可以包含属性的 get 和 set 方法、索引器的 get 和 set 方法以及事件的 add 和 remove 方法.但是字段不是方法。没有与字段相关联的“插槽”,您可以使用对字段位置的引用来“填写”。因此,接口(interface)可以定义方法、属性、索引器和事件,但不能定义字段。

关于c# - 为什么 C# 接口(interface)不能包含字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2115114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com