如何在非静态实例对象中包装静态类(动态)

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)

谢谢大家.

Ein*_*nar 2

我想说的是IL一代。创建代理是一个非常简单的场景。我实际上写了一篇关于它的博客文章:einarwh.posterous.com/patching-polymorphic-pain-at-runtime。场景不同,但解决方案几乎相同。

您基本上可以按照博客文章中的方式进行操作,只是您不需要将“this”引用加载到堆栈上(因为您正在执行静态方法调用)。