gpt4 book ai didi

.net - 为什么 .Net 引用类型中有接口(interface)?

转载 作者:行者123 更新时间:2023-12-04 00:57:21 26 4
gpt4 key购买 nike

为什么接口(interface)是引用类型?据我了解,接口(interface)是类(或结构)之间的契约,那么为什么它是一种类型呢?我会认为它既不是值类型也不是引用类型。

最佳答案

要被视为结构,编译器必须知道 在编译时 具体类型是什么,在堆栈上保留正确的空间。这意味着 即使结构实现 IFoo ,然后:

var ms = new MyStruct();
IFoo foo = ms;

然后分配给 foo是拳击操作。您可以说“编译器应该发现它只是一个 foo 并使用 'constained' 操作码”,但在一般情况下(对 foo 等进行多次分配)这是不可能的(我会冒险猜测它将遇到“停止问题”)。

还有一个虚拟与静态调用的问题,但“受约束的”操作码可以解决这个问题。

基本上,接口(interface)的任何使用都必须始终被视为引用。

对此有一个异常(exception):通用约束。

如果你有
static void DoBar<T>(T target) where T : IFoo {
target.Bar();
}

这里该方法对每个值类型进行一次 JIT 处理,因此 T 所需的堆栈空间 已知;调用 Bar是“受约束的”,可以根据需要自动变为虚拟或静态。

关于.net - 为什么 .Net 引用类型中有接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4638367/

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