如何防止.NET基类使用?

时间:2012-03-19 20:53:04

标签: c# inheritance

我正在开展一个项目,我需要为自定义实现WebClient扩展MyWebClient

我还需要确保MyWebClient是项目上任何开发人员实现的唯一版本,并且没有人使用基础WebClient类。

是否可以阻止使用WebClient,考虑到它不是我有权访问的代码?

4 个答案:

答案 0 :(得分:2)

根据您需要的WebClient功能,您可以考虑将MyWebClient作为代理实施,仅公开您允许从WebClient成员使用的方法。

示例:

public class MyWebClient
{
    private WebClient HiddenWebClient {get; set;}

    // proxy sample
    public void DownloadFile(string address, string fileName)
    {
        HiddenWebClient.DownloadFile(address, fileName);
    }

   // other proxy methods & your specific implementation come here.

}

之后,您将需要一个专门的ctor和一个工厂来正确地实例化MyWebClient

这不会阻止您的开发人员使用WebClient,这会非常困难(例如,请参阅@gdoron建议),但有助于避免错误地使用它。

修改

从您上次发表的评论中,我认为您需要的只是一个工厂,它将为您的所有WebClient个实例设置用户代理。

然后,根据您的组织,您需要就其使用情况进行强有力的沟通(可能还需要一个搜索工具来查找项目中的new WebClient())。

public static class WebClientFactory
{
    public static WebClient Create()
    {
        WebClient result = new WebClient();
        result.Headers.Add("My Fancy User Agent");
        return result;
    }
}

答案 1 :(得分:1)

执行此操作的最佳方法是对所有代码进行代码检查,并确保未使用WebClient。另一种选择是安排夜间任务并从源代码控制中提取并搜索项目中的每个文件,看看他们是否使用WebClient而不是MyWebClient(使用Roslyn可能更容易)。最重要的是,这不是代码问题(或不应该是)它应该是一个培训问题。

答案 2 :(得分:0)

如果你真的需要它,(我非常怀疑它)你能做到的唯一方法就是反思。

当应用程序开始扫描Assembly中所有方法和类的代码时,检查它们是否使用了禁用的WebClient类。

我想你不会这样做......

答案 3 :(得分:0)

如果您使用的是ReSharper,则可以使用“使用模式搜索”功能,并将其设置为只需按下神奇的ALT +即可自动将WebClient代码转换为MyWebClient代码输入快捷方式!

请参阅:http://www.jetbrains.com/resharper/webhelp/Reference__Search_with_Pattern.html