コンパイル時に同等のメタデータを提供するために C# で複合属性を作成する方法はありますか?
たとえば、次のように変更します。
[ClassInterface(ClassInterfaceType.AutoDual)]
[ProgId("MyProgId")]
[MyMefExport("MyProgId")]
public class MyClass
{
}
に:
[MyCompositeAttribute("MyProgId")]
public class MyClass
{
}
コンパイル時に同等のメタデータを提供するために C# で複合属性を作成する方法はありますか?
たとえば、次のように変更します。
[ClassInterface(ClassInterfaceType.AutoDual)]
[ProgId("MyProgId")]
[MyMefExport("MyProgId")]
public class MyClass
{
}
に:
[MyCompositeAttribute("MyProgId")]
public class MyClass
{
}
属性自体には意味がありません。操作を変更する可能性のあるクラスに関連付けられた属性を列挙するのはコードです。
属性を理解するコードを制御すると、複合属性を作成して、複数の個別の属性が適用されたかのように動作できます。
そうは言っても、あなたがProgIdもそれを解釈する C# コンパイラも制御しているとは思えません...
カスタム属性を読み取る次のコードがあるとします。
var attrs = typeof(MyClass).GetCustomAttributes(typeof(MyCompositeAttribute) ,false);
依存するコードは次のようになります。
var attrs = typeof(MyClass).GetCustomAttributes(typeof(ProgId) ,false);
その属性を返すことができません。