C# 在派生类型上调用static时是否可以检测类型

C# 在派生类型上调用static时是否可以检测类型,c#,static,C#,Static,给定 打电话的时候 public class Original { public static DoStuff() { } } public class Derived : Original { } 撇开需求的古怪不谈,在DoStuff()中是否可以检测调用它的类 i、 e.在DoStuff()的实现中,是否有可能分辨出Original.DoStuff()之间的差异和派生的.DoStuff()不在C#中,否-编译后的IL直接引用Original.DoStuff (我刚刚验证了VB显然

给定

打电话的时候

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

public class Derived : Original {
}
撇开需求的古怪不谈,在
DoStuff()
中是否可以检测调用它的类

i、 e.在
DoStuff()
的实现中,是否有可能分辨出
Original.DoStuff()之间的差异
派生的.DoStuff()

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


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

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

正如Jon所说,在C#中不可能,因为静态方法具有唯一的入口点。反正你是对的,,当你有一个使用活动记录样式模式的核心库,你想创建一个派生类,例如
类MyAppUser:SystemCoreUser
并使用类似
MyAppUser.Load(id)的东西时,你会需要检测它。

它是静态的,这与它有什么关系?你为什么需要这样做?@CarstenKönig
。您可以在静态方法中使用反射来更新正确的类型。我承认这是一个奇怪的请求,而且还有更好的模式,我只是好奇。我以前曾见过用于此目的的模式
公共类派生:Original
(奇怪的重复出现的泛型模式),但我建议反对它,因为大多数样式分析工具都会将此标记为警告,告诉您直接调用
Original.DoStuff()
(因为通过派生类调用静态方法通常会产生误导,而且常常是错误的)。
Derived.DoStuff();