我需要调用一个静态类的方法。此类仅在运行时已知(它是 System.Type 变量)。我知道我的方法是在“MyObject”类中实现的。我该如何调用这种方法?说明我需要做的代码如下。它可能看起来有点变态,但我发誓我会把它用于好的目的,不会让宇宙内爆。
public class MyObject
{
public static string ReturnUsefulStuff()
{
return "Important result.";
}
}
public class MyChildObject: MyObject
{
// Hey! I know about ReturnUsefulStuff() method too!
}
public class App
{
public void Main()
{
// The following type isn't supposed to be known at compile time.
// Except that it will always be MyObject type or its descendent.
Type TypeOfMyObject = typeof(MyChildObject);
// My erotic fantasy below. That line doesn't actually work for static methods
string Str = (TypeOfMyObject as MyObject).ReturnUsefulStuff();
// I know that type has this method! Come on, let me use it!
MessageBox.Show(Str);
}
}
在 Delphi 中,这可以通过声明来实现
// ...
// interface
Type TMyObjectClass = class of TMyObject;
// ...
// implementation
ClassVar := TMyChildObject;
Str := TMyObjectClass(ClassVar).ReturnUsefulStuff();
这要归功于 Delphi 的“类”构造。编译器知道 TMyObject 具有“ReturnUsefulStuff”并且 TMyChildObject 是从它派生的,并且它还具有对 ClassVar 中的类的引用。这是所需的一切。C# 没有“类”的概念,它只有 The One System.Type 将(几乎)统治它们。有什么建议么?我会被迫使用各种丑陋的反射技术吗?