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

本文关键字:方法 应用程序 | 更新日期: 2023-09-27 18:36:17

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

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

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

我的问题是,是否可以强迫人们在从此应用程序调用LogToULS时随时使用第二个签名,或者这是否需要通过程序员教育来完成?

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

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

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

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

将第一个重载定义为:

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

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