相关疑难解决方法(0)

为什么C#接口方法没有声明为抽象或虚拟?

接口中的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中声明.

c# methods virtual-functions interface abstract

106
推荐指数
3
解决办法
7万
查看次数

如何在C#中实现反射?

我很好奇在哪里Type.GetType()实现了,所以我看了一下程序集并注意到Type.GetType()调用base.GetType(),因为Type继承自我MemberInfo看了一下它被定义为_MemberInfo.GetType()返回this.GetType().由于我无法找到显示C#如何获取类型信息的实际代码,我想知道:

CLR如何在运行时从对象中获取Type和MemberInfo?

.net c#

20
推荐指数
3
解决办法
1482
查看次数

标签 统计

c# ×2

.net ×1

abstract ×1

interface ×1

methods ×1

virtual-functions ×1