属性:避免代码重复

时间:2012-07-30 18:02:17

标签: c# .net attributes

[MyAttribute(Name = "Test123"]
public MyClass
{
    public string Name 
    {
       get { return "Test123"; }
    }
}

这是代码示例,我需要两次定义名称。属性中的一次和类本身中的一次。有没有办法避免这种重复?

我需要两个,因为有时候,我正在遍历程序集以查找使用 MyAttribute 的所有类并列出它们(带有名称)。其他时候,我可以访问实例化的对象,所以我不想使用该属性。

2 个答案:

答案 0 :(得分:2)

如果名称可以放入字符串常量,那么您可以将该常量用于属性参数以及属性的返回值。

如果您需要更改名称,只需更改const值。

[MyAttribute(MyClass.MyClassName)]
public MyClass
{
    private const string MyClassName = "Test123";

    public string Name 
    {
       get { return MyClass.MyClassName; }
    }
}

答案 1 :(得分:1)

以下内容可能有效。然而,这将是非常低效的。注意,我没有测试下面的代码,但它应该是关闭的。

[MyAttribute(Name = "Test123"]
public MyClass
{
    public string Name 
    {
       get { return ((MyAttribute)(GetType().GetCustomAttributes(typeof(MyAttribute), true).First())).Name; }
    }
}

为什么首先需要属性和属性?事实上你需要两者,特别是因为Name属性是“静态”(附加到类型)而属性是实例,所以气味不对。