[MyAttribute(Name = "Test123"]
public MyClass
{
public string Name
{
get { return "Test123"; }
}
}
这是代码示例,我需要两次定义名称。属性中的一次和类本身中的一次。有没有办法避免这种重复?
我需要两个,因为有时候,我正在遍历程序集以查找使用 MyAttribute 的所有类并列出它们(带有名称)。其他时候,我可以访问实例化的对象,所以我不想使用该属性。
答案 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属性是“静态”(附加到类型)而属性是实例,所以气味不对。