可以强制在应用程序中使用特定的方法签名吗?

时间:2012-06-05 21:26:15

标签: c# .net

我们有一个帮助程序集,帮助开发人员记录日志信息。用于记录的特定方法有两个签名:

LogToULS(string message)
LogToULS(string message, Microsoft.Sharepoint.Administration.SPDiagnosticsCategory category)

在我的应用程序中,我创建了一个静态类,其中包含我希望在应用程序记录某些内容时使用的SPDiagnosticsCategory实例。如果使用第一个签名,则会分配一个通用类别,并且很难找到特定于此应用程序的记录信息。

我的问题是,是否可以强制人们在从此应用程序调用{​​{1}}的任何时候使用第二个签名,或者是否需要通过程序员教育来完成?

2 个答案:

答案 0 :(得分:4)

如果您无法从代码库中删除该方法,则可以将其标记为已弃用,以便其他程序员在调用它时会收到编译器警告(并且IntelliSense将警告其使用):

[Obsolete("Use LogToULS(string, SPDiagnosticsCategory) instead."]
public void LogToULS(string message)
{
    // ...
}

根据ObsoleteAttribute documentation,您可以将true作为第二个参数传递给其构造函数,以导致编译器错误(不仅仅是警告),但这可能会破坏现有代码。

答案 1 :(得分:0)

将第一个重载定义为:

public void LogToULS(string message)
{
    LogToULS(message, genericErrorCodeHere);
}

然后,使 Resharper 内联此方法,以便更新所有现有的呼叫站点。接下来,删除旧的,过时的重载。