興味深い問題があります。静的クラスを動的にラップする必要があります。つまり、非静的インスタンスを呼び出し元に返します。例えば:
public object CreateInstance(string className) {
Type t = assembly.GetType(className);
if (IsStatic(t)) {
return CreateStaticWrapper(t);
} else {
return Activator.CreateInstance(t);
}
}
だから私が必要とするのは、実装方法に関するポインタCreateStaticWrapper
です。
注: 残念ながら動的オブジェクトは使用できません。
それで、私のオプションは何ですか?私はIL生成を学ぶことに熱心ではありませんか?IL生成(Reflection.Emit、または他の方法はありますか?)が進むべき道である場合、そこにポインタがありますか?
編集: デリゲートの辞書を返すことができることに注意することが重要です。だから私はこれを使うことができDelegate.CreateDelegate
ましたが、オーバーロードされたメソッドとジェネリックメソッドを処理する方法を理解できないようです.
Edit2: 別のオプションは、Emit を使用して型に空のコンストラクターを挿入することです。再びポインターはありますか? これは静的とマークされた型でも可能ですか? static キーワードは IL に入りますか?
Edit3: 少しのコンテキストについては、これを javascript 環境に渡します: my projectを参照してください。だから私は(JavaScriptで)できるようにしたいと思います:
var fileHelper = .create('System.IO.File');
if (fileHelper.Exists(fileName)) { fileHelper.Delete(fileName); }
皆さんありがとう。