我有一个有趣的问题。我需要动态地包装静态类。即向我的呼叫者返回一个非静态实例。例如:如何将静态类包装到非静态实例对象中(动态)
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