我可以废弃属性的特定用法吗?

时间:2015-08-12 13:29:32

标签: c# attributes

我有一个当前定义的自定义属性:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface)]
public class MyAttribute : Attribute {}

我现在想要废弃接口上的用法 - 只留下Class使用。我宁愿不删除这种用法 - 因为我想为接口上的任何现有用法生成警告/建议。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

不幸的是你做不到。你有两个我能想到的选择:

  1. 删除对Interface的引用,并可能破坏使用它的任何代码。

    [AttributeUsage(AttributeTargets.Class)]
    public class MyAttribute : Attribute {}
    
  2. 创建属性的v2版本并使原始属性完全废弃

    [Obsolete("Use MyNewAttribute instead")]
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface)]
    public class MyAttribute : Attribute {}
    
    [AttributeUsage(AttributeTargets.Class)]
    public class MyNewAttribute : Attribute {}
    
  3. 我更喜欢选项2,它更清晰,更满足"O"中的SOLID