【发布时间】:2015-10-31 16:46:22
【问题描述】:
如果接口类型未使用具体实现进行初始化,CLR 是否会加载它们?
考虑具有实现 FooImpl 的接口 IFoo
例如
IFoo foo;
相对于
IFoo foo = new FooImpl();
CLR 只会在第二种情况下加载 IFoo 类型吗?此外,如果存在从 FooImpl 继承的另一种类型(例如 FooImpl2)
这段代码是否会从 FooImpl2 开始并沿着继承层次结构加载 IFoo 接口?此外,IFoo 的 MethodTable 是否会包含直接指向 FooImpl2 的方法表的指针,还是会通过中间实现类型(即 FooImpl)重定向。
IFoo foo = new FooImpl2();
【问题讨论】:
-
没有什么非常微妙的事情发生,CLR 中的存根是一座 99% 都在水下的冰山。 Vance Morrison 在this blog post 中解释得很好。
-
@HansPassant 感谢分享帖子,会通过它!我记得你曾在 2009 年主持过 MSDN 论坛……
标签: c# .net interface clr method-dispatch