我想使用 TypeBuilder 构建一个与接口(interface)匹配的类型。它的基类型将是对象,因为我没有任何抽象点。
有问题的接口(interface)有一个像这样的属性::
public interface IFoo{
int Property{get;}
}
我需要实际创建一个 PropertyBuilder 吗?或者我是否可以为 int get_Property()
方法发出一个方法?
最佳答案
CLI 不关心属性,只要所有方法(真正定义的都是接口(interface))都有实现即可:
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;
关于c# - 如果我使用 TypeBuilder 构建具有属性的类型,我是否需要使用 propertyBuilder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4210902/