gat*_*pia 12 .net c# instance non-static static-class
我有一个有趣的问题.我需要动态包装静态类.即返回一个非静态实例给我的调用者.例如:
public object CreateInstance(string className) {
Type t = assembly.GetType(className);
if (IsStatic(t)) {
return CreateStaticWrapper(t);
} else {
return Activator.CreateInstance(t);
}
}
Run Code Online (Sandbox Code Playgroud)
所以我需要的是如何实现的指针CreateStaticWrapper.
注意:遗憾的是我无法使用Dynamic对象.
那么我的选择是什么?我不是那么热衷于学习IL一代吗?如果IL生成(Reflection.Emit,或者现在还有其他方法吗?)是什么方法,那么有没有人有指针?
编辑:重要的是要注意我可以返回代表词典.所以我可以使用Delegate.CreateDelegate这个,但我似乎无法解决如何处理重载方法和通用方法.
Edit2:另一种选择是使用Emit将空构造函数注入到类型中,再次指向任何指针?甚至可以在标记为静态的类型上进行此操作吗?static关键字是否会进入IL?
Edit3:对于一些上下文,我将它传递给javascript环境,请参阅: 我的项目.所以我希望能够(在JavaScript中):
var fileHelper = .create('System.IO.File');
if (fileHelper.Exists(fileName)) { fileHelper.Delete(fileName); }
Run Code Online (Sandbox Code Playgroud)
谢谢大家.
我想说的是IL一代。创建代理是一个非常简单的场景。我实际上写了一篇关于它的博客文章:einarwh.posterous.com/patching-polymorphic-pain-at-runtime。场景不同,但解决方案几乎相同。
您基本上可以按照博客文章中的方式进行操作,只是您不需要将“this”引用加载到堆栈上(因为您正在执行静态方法调用)。