复合属性

时间:2012-11-21 16:06:37

标签: c# .net reflection attributes

有没有办法在C#中创建复合属性以在编译时提供等效的元数据?

例如,改变:

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

要:

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

2 个答案:

答案 0 :(得分:2)

属性本身没有意义。它是枚举附加到可能改变其操作的类的属性的代码。

如果您控制了解该属性的代码,您可以创建一个复合属性,并且就像应用了多个单独的属性一样。

话虽如此,我怀疑你是否控制ProgId或C#编译器解释它......

答案 1 :(得分:1)

假设您有以下代码来阅读自定义属性:

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

依赖的任何代码都说:

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

将无法返回该属性。