将本机方法标记为已弃用/已过时?

时间:2011-08-22 17:38:21

标签: .net vb.net standards custom-attributes

在.NET中,您可以将某些方法标记为过时,以便开发人员在尝试使用已弃用的方法时收到警报。

<Obsolete("Do not call this method.")> Private Sub FormerMethod()

问题是你只能在你控制的课程中这样做。当您希望开发人员避免在.NET本身提供的类或供应商上使用某些方法时,您会怎么做?

例如,如果您希望开发人员更喜欢DataTable而不是Select的自定义扩展方法,该怎么办?如果只是弃用DataTable,我不得不定义Select类的自定义版本。这将使我们不得不警告自定义表是否被使用。

我知道有像(FxCop)这样的工具可以帮助实施编码标准;但是,我的问题是,如果没有某些第三方工具,这是否可以处理。

2 个答案:

答案 0 :(得分:2)

虽然你可能不喜欢这个答案,但我认为包装是合适的选择。

对于第三方供应商的代码,包装应该是强制性的,只是为了产生单元测试的抽象级别。作为一个包装器,您显然可以将方法标记为Obsolete

对于.NET对象,它有点棘手。显然,有人可以只包括命名空间并前往城镇;我不相信有这样一个问题的“仅代码”解决方案就像你想要的那样,除了可能进行一个搜索你的解决方案的集成测试,并且当你调用那个你不喜欢的特定方法时失败。

答案 1 :(得分:2)

如果您想将.Net Framework类标记为已弃用,则可以在每个人使用的共享\ infrastructure类中重新定义它。

示例:

namespace System.ComponentModel
{
    [Obsolete("Please do not use BackgroundWorker. Use class XXXX instead.")]    
    public class BackgroundWorker
    {

    }
}

也可以通过扩展原始.Net Framework类,然后覆盖调用基本方法但使用Obsolete属性修饰的特定方法来完成特定方法。

但是,您需要解析循环类定义(可能使用汇编引用别名)。