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



假设我有以下代码:

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#中是不可能的-没有通用的方法来做到这一点。

相关内容

  • 没有找到相关文章

最新更新