[MyAttribute(Name = "Test123"]
public MyClass
{
public string Name
{
get { return "Test123"; }
}
}
是这个代码示例,我需要定义两次名称。一次在属性中,一次在类本身中。有没有办法避免这种重复?
我需要两者,因为有时,我会遍历程序集以查找所有使用MyAttribute的类并列出它们(带有名称)。其他时候,我可以访问实例化的对象,所以我不想使用该属性。
[MyAttribute(Name = "Test123"]
public MyClass
{
public string Name
{
get { return "Test123"; }
}
}
是这个代码示例,我需要定义两次名称。一次在属性中,一次在类本身中。有没有办法避免这种重复?
我需要两者,因为有时,我会遍历程序集以查找所有使用MyAttribute的类并列出它们(带有名称)。其他时候,我可以访问实例化的对象,所以我不想使用该属性。
如果可以将名称放入字符串常量中,那么您可以将该常量用于属性参数和属性的返回值。
如果您需要更改名称,只需更改 const 值。
[MyAttribute(MyClass.MyClassName)]
public MyClass
{
private const string MyClassName = "Test123";
public string Name
{
get { return MyClass.MyClassName; }
}
}
像下面这样的东西可能会起作用。不过,这将是非常低效的。注意,我没有测试下面的代码,但它应该很接近。
[MyAttribute(Name = "Test123"]
public MyClass
{
public string Name
{
get { return ((MyAttribute)(GetType().GetCustomAttributes(typeof(MyAttribute), true).First())).Name; }
}
}
为什么你首先需要一个属性和一个属性?您需要两者的事实,特别是因为 Name 属性是“静态的”(附加到类型)并且属性是实例,所以闻起来是错误的。