我有一個有趣的問題。我需要動態地包裝靜態類。即向我的呼叫者返回一個非靜態實例。例如:如何將靜態類包裝到非靜態實例對象中(動態)
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的類型中,再次指向任何指針?這甚至可能在標記爲靜態的類型上?靜態關鍵字是否將其加入到IL中?
編輯3:對於一些上下文,我將它傳遞給javascript環境,請參閱:my project。所以我希望能夠(在JavaScript中):
var fileHelper = .create('System.IO.File');
if (fileHelper.Exists(fileName)) { fileHelper.Delete(fileName); }
謝謝所有。
您的目標是創建一個靜態類的內容的副本?是否有靜態類的非靜態等價物(與靜態類具有相同屬性的非靜態類?) – k3b 2011-05-31 08:30:10
包裝物應該是什麼樣子?原始類中相應靜態成員的代理實例成員? – Einar 2011-05-31 08:52:33
我已編輯( 3)有點上下文,基本上我把這個靜態類傳遞給一個javascript環境,所以是的代理需要有相同的簽名,我希望能夠做到(在JavaScript中):var fs = .create ('System.IO.File'); fs.Exists('filename'); – gatapia 2011-05-31 08:57:15