在c#中访问实例级自定义属性

Pet*_*teH 2 .net c# reflection custom-attributes

想象一下,我有以下代码:

class A
{
    [UsefulAttribute("foo")]
    B var1;
    [UsefulAttribute("bar")]
    B var2;

    ...
}


class B
{
    public string WriteSomethingUseful()
    {
        ?????
    }
}  
Run Code Online (Sandbox Code Playgroud)

我的问题是,它需要在什么代码中放入????? 这样,当我调用var1.WriteSomethingUseful时,我得到一个foo的输出,当我调用var2.WriteSomethingUseful时,我得到一个bar的输出?

我有一种感觉,这是一个非常直截了当的问题,我认为我的主要问题是我通过长时间的思考让自己陷入混乱状态!

说真的,我定义了UsefulAttribute,并意识到部分代码必须是GetCustomAttributes(typeof(UsefulAttribute)...)调用.我感到困惑的是如何在实际实例上而不是在类型级别上提取这些值.

非常感谢,皮特

Chr*_*ain 5

这是不可能的.对于初学者来说,如果A的多个不同实例引用了同一个B,该怎么办?或者如果var1和var2都引用了同一个B实例怎么办?

在字段上设置属性时,将该属性附加到类A的类型,而不是存储在字段var1中的类B的实例.

解决此问题的常用方法是将数据存储为B的属性,通过属性设置器或构造函数参数进行设置,然后从WriteSomethingUseful方法访问该属性.