我想使用TypeBuilder来构建一个与接口匹配的类型.它的基类型将是对象,因为我没有任何抽象点.
有问题的界面有如下属性::
public interface IFoo{
int Property{get;}
}
Run Code Online (Sandbox Code Playgroud)
我是否需要实际创建PropertyBuilder?或者我可以放弃为该int get_Property()方法发出一种方法?
CLI不关心属性,只要所有方法(所有接口都是真正定义的)都有实现:
var ab = AppDomain.CurrentDomain.DefineDynamicAssembly(
new AssemblyName("foo"), AssemblyBuilderAccess.RunAndSave);
var mb = ab.DefineDynamicModule("foo");
var tb = mb.DefineType("bar");
tb.AddInterfaceImplementation(typeof(IFoo));
var method = typeof(IFoo).GetProperty("Property").GetGetMethod();
var impl = tb.DefineMethod("impl",
MethodAttributes.Private | MethodAttributes.Virtual,
typeof(int), Type.EmptyTypes);
var il = impl.GetILGenerator();
il.Emit(OpCodes.Ldc_I4_7); // because it is lucky
il.Emit(OpCodes.Ret);
tb.DefineMethodOverride(impl, method);
var type = tb.CreateType();
IFoo foo = (IFoo)Activator.CreateInstance(type);
var val = foo.Property;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1002 次 |
| 最近记录: |