当对派生类型调用static时,是否可以检测类型

本文关键字:类型 是否 检测 static 派生 调用 | 更新日期: 2023-09-27 18:29:01

给定

public class Original {
  public static DoStuff() {
  }
}
public class Derived : Original {
}

调用时

Derived.DoStuff();

撇开需求的怪异不谈,在DoStuff()中是否有可能检测到调用它的类?

即,在CCD_ 2的实现中是否有可能区分CCD_ 3和CCD_ 4之间的

当对派生类型调用static时,是否可以检测类型

不在C#中,不-编译的IL直接引用Original.DoStuff

(我刚刚验证了VB显然对静态调用做了同样的事情,而IIRC在通过"子"引用调用虚拟方法时,生成的代码中VB和C#之间有区别。)

除非Derived提供了自己对DoStuff的定义,否则Derived.DoStuff()等效于Original.DoStuff()。静态方法/成员变量与类相关联,而不是与任何实例(对象)相关联。

正如Jon所说,在C#中是不可能的,因为静态方法有唯一的入口点。不管怎么说,你是对的,需要检测它是非常奇怪的。