gpt4 book ai didi

c# - 如果我使用 TypeBuilder 构建具有属性的类型,我是否需要使用 propertyBuilder?

转载 作者:太空狗 更新时间:2023-10-30 01:10:39 27 4
gpt4 key购买 nike

我想使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com