Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以废弃属性的特定用法吗?_C#_Attributes - Fatal编程技术网

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

C# 我可以废弃属性的特定用法吗?,c#,attributes,C#,Attributes,我有一个自定义属性,当前定义如下: [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface)] public class MyAttribute : Attribute {} 我现在想废弃接口上的用法——只留下类的用法。我不想仅仅删除该用法,因为我想对接口上的任何现有用法生成警告/建议。有什么方法可以做到这一点吗?不幸的是,你不能做到这一点。你有两个选择,我可以想到: 删除对接口的引用,并可能破坏使用它的任何代码

我有一个自定义属性,当前定义如下:

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

我现在想废弃接口上的用法——只留下类的用法。我不想仅仅删除该用法,因为我想对接口上的任何现有用法生成警告/建议。有什么方法可以做到这一点吗?

不幸的是,你不能做到这一点。你有两个选择,我可以想到:

  • 删除对
    接口的引用
    ,并可能破坏使用它的任何代码

    [AttributeUsage(AttributeTargets.Class)]
    public class MyAttribute : Attribute {}
    
  • 制作属性的v2版本,并将原始版本完全废弃

    [Obsolete("Use MyNewAttribute instead")]
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface)]
    public class MyAttribute : Attribute {}
    
    [AttributeUsage(AttributeTargets.Class)]
    public class MyNewAttribute : Attribute {}
    

  • 我更喜欢选项2,它更干净,并且满足您的要求。

    我认为您不能。您仅限于删除该属性或创建您的类的v2版本并淘汰整个类。请将该属性标记为已淘汰,使用错误的用法,然后创建一个新的属性。像一个创可贴一样拉快。我意识到我可以做到这一点,但这需要为属性指定一个不同的名称(或名称空间)。我知道该属性在类上被广泛使用,但在接口上可能不会太多,因此我不愿意更改通用名称。最糟糕的情况是,我会删除界面的使用并添加一个记录性的评论。我会在这里留下我的答案,因为只有你才能决定你的最佳选择是什么。