在派生类型上调用静态时是否可以检测类型

时间:2012-03-26 18:31:21

标签: c# static

鉴于

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

public class Derived : Original {
}

致电

Derived.DoStuff();

除了要求的怪异之外,是否可以在DoStuff()内检测出被调用的类?

即。是否可以在DoStuff()的实施过程中区分Original.DoStuff();Derived.DoStuff();

3 个答案:

答案 0 :(得分:8)

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

(我刚刚确认VB显然对静态调用做了同样的事情,而IIRC在通过“child”调用虚拟方法时生成的代码中VB和C#之间存在差异参考。)

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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