2011-08-22 34 views
4

在.NET中,您可以将某些方法标记为过时,以便在尝试使用不推荐使用的方法时向开发人员发出警报。将本地方法标记为已弃用/过时?

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

事情是你只能在你控制的类内做到这一点。当您希望开发人员避免在.NET中或供应商本地提供的类中使用某些方法时,您会做什么?

例如,如果您希望开发人员选择DataTable而不是Select的自定义扩展方法,该怎么办?我讨厌必须定义一个DataTable类的定制版本,如果只是反对Select。这将使我们不得不警察是否使用定制桌子。

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

+1

您是否执行代码审查? –

+0

+1这也是一个很好的建议。 – Tejs

回答

2

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

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

对于.NET对象,这有点棘手。显然,有人可以包括命名空间并去镇上;我不认为像你想要的那样,这个问题只有一个'仅用于代码'的解决方案,除了可能做一个集成测试来搜索你的解决方案,并在你不喜欢的特定方法被调用时失败。

+0

我认为包装可能是一个很好的方法,因为我不知道.NET允许我做我想做的事情。谢谢! – Mario

2

如果要将.Net Framework类标记为不赞成使用,可以在每个人都使用的共享\ infrastructure类之一中重新定义它。

实施例:

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

    } 
} 

它可能通过扩展原始.Net框架类,然后覆盖该调用基的方法,但与Obsolete属性装饰具体方法也做了具体的方法。

但是,您需要解析循环类定义(可能通过使用程序集引用别名)。

+0

这似乎适用于废弃System类。 –

相关问题