2012-07-30 71 views
0
[MyAttribute(Name = "Test123"] 
public MyClass 
{ 
    public string Name 
    { 
     get { return "Test123"; } 
    } 
} 

這是代碼示例,我需要定義名稱兩次。一次在屬性中,一次在類本身。有沒有辦法避免這種重複?屬性:避免代碼複製

我需要這兩個,因爲有時候,我遍歷程序集來找到所有使用MyAttribute的類並列出它們(帶有名稱)。其他時間,我可以訪問實例化的對象,所以我不想使用該屬性。

+1

這取決於你將如何使用它。你能提供更多的信息嗎? – 2012-07-30 18:04:52

回答

2

如果可以將該名稱放入字符串常量中,那麼可以將該常量用於屬性參數以及該屬性的返回值。

如果您需要更改名稱,只需更改常量值即可。

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

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

像下面這樣的東西可能會起作用。這將是非常低效的。請注意,我沒有測試過下面的代碼,但它應該接近。

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

爲什麼你需要在思想上首位的屬性和屬性?事實上,你需要兩者,尤其是因爲Name屬性是「靜態的」(附加到類型)並且屬性是實例,所以聞到錯誤。