接口中的C#方法在不使用virtual关键字的情况下声明,并在派生类中重写而不使用override关键字.
是否有一个原因?我认为它只是一种语言方便,显然CLR知道如何处理这个问题(默认情况下方法不是虚拟的),但还有其他技术原因吗?
以下是派生类生成的IL:
class Example : IDisposable {
public void Dispose() { }
}
.method public hidebysig newslot virtual final
instance void Dispose() cil managed
{
// Code size 2 (0x2)
.maxstack 8
IL_0000: nop
IL_0001: ret
} // end of method Example::Dispose
Run Code Online (Sandbox Code Playgroud)
请注意,该方法virtual final在IL中声明.
我很好奇在哪里Type.GetType()实现了,所以我看了一下程序集并注意到Type.GetType()调用base.GetType(),因为Type继承自我MemberInfo看了一下它被定义为_MemberInfo.GetType()返回this.GetType().由于我无法找到显示C#如何获取类型信息的实际代码,我想知道:
CLR如何在运行时从对象中获取Type和MemberInfo?