自定义属性是否可以暗示没有继承的其他属性?

时间:2009-08-19 14:32:48

标签: c# .net inheritance attributes

我正在编写一些库代码,并且使用该代码的类需要指定两个属性(一个自定义属性和一个来自.NET)。

记录这个要求并将这两个属性复制并粘贴到使用我的库的每个类上都有点麻烦,所以我认为让我的自定义属性意味着另一个的存在可能会更好。但是,.NET框架中的其他属性是密封的,所以我不能只继承它......

有没有办法做到这一点?我可以在运行时添加.NET属性吗?

感谢。

2 个答案:

答案 0 :(得分:1)

我不相信有一种方法可以暗示辅助属性或在运行时添加属性。但是,您可以使用自定义代码模板在添加属性时将属性添加到每个类。和/或对于已经开发的类,我怀疑你可以写一个遍历每个文件的宏并将属性添加到类中,但是我过去没有这样做过,所以我不确定它会带来什么,我知道制作一个代码模板来添加属性到类声明是相对简单的。但这仅适用于您从添加模板的角度添加的类。如果你还需要对旧类进行清理,如果你有很多需要完成的文件/类,我会研究宏。或者,如果没有太多,请手动完成。

答案 1 :(得分:1)

虽然可以在属性中使用继承,但它是recommended you don't

由于这只是一个性能规则,因此您不会违反正确性,但它可能会引起一些混淆,您必须花费大量精力确保不违反基本属性的语义。如果尝试使用AttributeUsage标志扩展属性的可能位置,则可能会导致问题。相关属性的规则是quite complex

  

方法可以应用两个属性中的任何一个,但不能同时应用两个属性。任何既未应用的操作也使用应用于包含类的属性。如果包含的类没有应用任何属性,则使用DataContractSerializer。

让它变得密封听起来像是一个明智的计划。此API的设计并未考虑到这种扩展。

在运行时向现有类添加属性是没有办法(缺少AOP样式'代码注入')。