鉴于
public class Original {
public static DoStuff() {
}
}
public class Derived : Original {
}
致电
Derived.DoStuff();
除了要求的怪异之外,是否可以在DoStuff()
内检测出被调用的类?
即。是否可以在DoStuff()
的实施过程中区分Original.DoStuff();
和Derived.DoStuff();
答案 0 :(得分:8)
不在C#中,不 - 编译的IL直接指向Original.DoStuff
。
(我刚刚确认VB显然对静态调用做了同样的事情,而IIRC在通过“child”调用虚拟方法时生成的代码中VB和C#之间存在差异参考。)
答案 1 :(得分:1)
除非Derived
提供自己的DoStuff
定义,否则Derived.DoStuff()
相当于Original.DoStuff()
。静态方法/成员变量与类相关联,而不与任何实例(对象)相关联。
答案 2 :(得分:0)
正如Jon所说,C#中不可能,因为静态方法有唯一的入口点。无论如何你是对的,人们需要检测它是非常奇怪的。