有没有办法在 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);
将无法返回该属性。