如何在运行时更改属性访问器

时间:2012-03-28 23:48:41

标签: c# accessor delegation

我正在寻找一种在运行时更改/添加给定类属性的访问器的方法。 示例代码如下所示,在类的.ctor上运行,我想要达到的是通过在运行时更改字段来将'TheSetMethod'添加到每个'字段'的'set'访问器中。 仅供参考:这背后有一个实施约束,这使我以这种方式做到这一点而不是使用标准的“get; set;”祖先,所以我不能'得到;设定;'在设计时间。

    public string field1;

    .ctor()
    {
        Type typeWebConfig = this.GetType();
        MemberInfo[] Fields = typeWebConfig.GetMembers(BindingFlags.Public |
                              BindingFlags.Instance );
        foreach(MemberInfo member in Fields) 
            if(member.MemberType == MemberTypes.Field)
            {
                FieldInfo field = (FieldInfo)member;
                //add a delegate method to field's 'SET'
            }
     }

     void TheSetMethod(string propName)
     {
     }

任何帮助将不胜感激。 干杯

2 个答案:

答案 0 :(得分:0)

您可以实现自定义DynamicObject类型来手动处理访问者。这只适用于.NET 4+。

答案 1 :(得分:-1)

为什么不直接将代码添加到setter中,然后使用变量来确定代码是否应该执行?在我看来,这听起来像是一个糟糕的设计,因为制作者的“动态”似乎也无法很好地进行测试。