首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Reflection.Emit创建属性

Reflection.Emit创建属性
EN

Stack Overflow用户
提问于 2015-01-30 16:30:46
回答 1查看 848关注 0票数 0

如何使用反射创建Property1?

代码语言:javascript
复制
public IProp Property1
{
    get
    {
        return new TestClass(TestMethod);
    }
}

private void TestMethod()
{
...
}

我在努力

代码语言:javascript
复制
    var propertyBuilder = typeBuilder.DefineProperty("Property1", 
        PropertyAttributes.None, typeof(IProp), Type.EmptyTypes);
    propertyBuilder.SetGetMethod(GenerateGetter(typeBuilder, testMethodInfo));

    MethodBuilder GenerateGetter(TypeBuilder typeBuilder, MethodInfo TestMethod)
    {
        var getterBuilder = typeBuilder.DefineMethod(TestMethod.Name,
            METHOD_ATTRIBUTES, TestMethod.ReturnType, Type.EmptyTypes);

        var actionCtor = typeof(Action).GetConstructors().Single();
        var testClassCtor = typeof(TestClass).GetConstructor(new[] { typeof(Action) });

        var il = getterBuilder.GetILGenerator();
        il.Emit(OpCodes.Ldarg_0);
        il.Emit(OpCodes.Ldftn, TestMethod);
        il.Emit(OpCodes.Newobj, actionCtor);
        il.Emit(OpCodes.Newobj, testClassCtor);
        il.Emit(OpCodes.Ret);
        return getterBuilder;
    }

但是我有System.Reflection.TargetException (对象不匹配目标类型)。我认为我有错误,因为我的IL代码是坏的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-31 22:02:46

我代替了

代码语言:javascript
复制
var getterBuilder = typeBuilder.DefineMethod(TestMethod.Name,
        METHOD_ATTRIBUTES, TestMethod.ReturnType, Type.EmptyTypes);

代码语言:javascript
复制
var getterBuilder = typeBuilder.DefineMethod(TestMethod.Name,
        METHOD_ATTRIBUTES, typeof(IProp), Type.EmptyTypes);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28240350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档