静的クラスのメソッドを呼び出す必要があります。このクラスは実行時にのみ認識されます (これは 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 の「class of」構造のおかげで機能します。コンパイラは、TMyObject に "ReturnUsefulStuff" があり、TMyChildObject がそこから派生していること、および ClassVar にクラスへの参照があることを認識しています。必要なものはすべて揃っています。C# には「のクラス」という概念がなく、それらすべてを (ほとんど) 支配しない唯一の System.Type しかありません。助言がありますか?あらゆる種類の醜いリフレクション テクニックを使用することを余儀なくされますか?