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

标签 c#

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

相关文章:

c# - 如何将 C# 'single case union type' 类对象序列化为其基础值并返回?

c# - 没有可用于 token 的 SecurityTokenValidator

c# - 如何发出对发出时类型未完成的委托(delegate)的调用?

c# - 无法从后面的代码访问(Javascript 填充)下拉选择的值

c# - 你如何在 C# 中找到用户名/身份

C# 方法重载和泛型接口(interface)

c# - 如何通知Windows服务(C#)数据库表更改(sql 2005)?

c# - 在 WebBrowser 控件中设置输入标签的值

c# - 我如何知道 WindowsFormsHost 何时在 WPF 中调整大小?

c# - XAML StringFormat 用于格式化 Double 值