想象一下,我有以下代码:
class A
{
[UsefulAttribute("foo")]
B var1;
[UsefulAttribute("bar")]
B var2;
...
}
class B
{
public string WriteSomethingUseful()
{
?????
}
}
我的问题是,它需要在 ????? 中输入什么代码,这样当我调用 var1.WriteSomethingUseful 时,我得到的输出< strong> foo ,当我调用 var2.WriteSomethingUseful 时,我得到 bar 的输出?
我觉得这是一个非常直截了当的问题,我认为我的主要问题是我长时间以来一直在努力陷入混乱状态!
说真的,我定义了 UsefulAttribute 并意识到部分代码必须是 GetCustomAttributes(typeof(UsefulAttribute)...)调用。我感到困惑的是如何将这些值拉出实际实例,而不是类型级别。
非常感谢, 皮特
答案 0 :(得分:5)
这是不可能的。对于初学者来说,如果A的多个不同实例引用了同一个B,该怎么办?或者如果var1和var2都引用了相同的B实例,那该怎么办?
在字段上设置属性时,您将该属性附加到类A的类型,而不是存储在字段var1中的类B的实例。
通常的做法是将数据存储为B的属性,通过属性设置器或构造函数参数设置它,然后从WriteSomethingUseful方法访问该属性。
答案 1 :(得分:3)
由于您的WriteSomethingUseful()
方法属于B类,但您的属性是在A
类型中声明的,因此您将无法根据实例访问它们 - 您根本就没有参考到A
。
当前B
实例可能根本与A
无关,并且无法检索“包含当前B
的类实例的类型(如果有)实例“ - 这在C#中是不可能的 - 没有通用的方法来做到这一点。