2012-11-21 91 views
4

有什麼辦法可以在編譯時使C#中的複合屬性提供等價的元數據?複合屬性

E.g,變化:

[ClassInterface(ClassInterfaceType.AutoDual)] 
[ProgId("MyProgId")] 
[MyMefExport("MyProgId")] 
public class MyClass 
{ 
} 

要:

[MyCompositeAttribute("MyProgId")] 
public class MyClass 
{ 
} 
+1

將'MyCompositeAttribute'放在類上的效果是什麼?它看起來像一個單一的屬性,所以它將它作爲一個單一的'MyCompositeAttribute'作爲元數據。 – dasblinkenlight

+0

不要認爲這是可能的,因爲您有效地要求MyCompositeAttribute從多個類繼承。 –

+0

請記住,它並不涉及屬性本身中的代碼,而是涉及將查找每個屬性的不同組件。你不能使用繼承,因爲@IanQuigley提到缺少多重繼承,而且因爲屬性通常是密封的。 – fsimonazzi

回答

2

屬性本身並沒有意義。這是枚舉附加到可能改變其操作的類的屬性的代碼。

如果您控制理解該屬性的代碼,則可以創建複合屬性並像應用多個單獨的屬性一樣操作。

話雖這麼說,我懷疑你控制ProgId也不是解釋它的C#編譯器...

1

假設您有下面的代碼讀取您的自定義屬性:

var attrs = typeof(MyClass).GetCustomAttributes(typeof(MyCompositeAttribute) ,false); 

則依靠任何代碼說:

var attrs = typeof(MyClass).GetCustomAttributes(typeof(ProgId) ,false); 

將無法​​返回該屬性。