假设我有以下代码:
class A
{
[UsefulAttribute("foo")]
B var1;
[UsefulAttribute("bar")]
B var2;
...
}
class B
{
public string WriteSomethingUseful()
{
?????
}
}
我的问题是,什么代码需要放在?????这样,当我调用var1。WriteSomethingUseful我得到foo的输出,当我调用var2。WriteSomethingUseful我得到栏的输出?
我有一种感觉,这是一个相当直接的问题,我认为我的主要问题是,我已经把自己工作到一个混乱的状态,思考太久了!!
说真的,我已经定义了UsefulAttribute,并意识到代码的一部分必须是GetCustomAttributes(typeof(UsefulAttribute)…)调用。我感到困惑的是如何在实际实例中提取这些值,而不是在类型级别。
很多谢谢,皮特
这不可能。对于初学者来说,如果A的多个不同实例都引用相同的B怎么办?或者如果同一个B实例同时被var1和var2引用呢?
当您在字段上设置属性时,您将该属性附加到类A的类型,而不是存储在字段var1中的类B的实例。
通常的方法是将数据存储为B的属性,通过属性setter或构造函数参数设置,然后从WriteSomethingUseful方法访问该属性。
由于您的WriteSomethingUseful()
方法在类型B中,但您的属性在类型A
中声明,您将无法基于实例访问它们-您根本没有对A
的引用。
当前的B
实例可能根本不与A
相关,如果不能检索"包含当前B
实例的类实例的类型(如果有的话)"-这在c#中是不可能的-没有通用的方法来做到这一点。