8

如果我有一个带有我想要的方法的类,protected并且internal. 我希望只有程序集中的派生类才能调用它。

既然protected internalprotected internal,你必须做出选择。在这种情况下你选择什么 -protectedinternal

4

5 回答 5

6

我个人会选择受保护的。如果您自己程序集中的子类足以调用该方法,那么为什么另一个程序集中的子类不能呢?也许您可以将功能完全重构为一个单独的(内部)类。

您确实需要客观地考虑该方法的目的。内部可访问性对我来说几乎总是感觉不对。主要是因为我在尝试从 .NET 框架中的控件或类派生时遇到了困难,因为有人决定将类或方法标记为内部。原作者从未注意到无法访问该方法会使实现子类变得更加困难。

编辑

澄清一下,一个类的内部可访问性非常有用,我并不是在暗示内部一般来说是不好的。我的观点是,在其他公共类上的内部方法对我来说似乎是错误的。正确设计的基类不应为同一程序集中的派生类提供不公平的优势。

于 2010-05-20T05:07:31.867 回答
5

我希望只有程序集中的派生类才能调用它。

那么,你有两个选择。你可以让它受到保护,每当你的一个客户扩展你的类并调用你的方法并且你发现它时,你可以给他们写一封措辞严厉的信,告诉他们请停止这样做。或者您可以将其设为内部,并对您同事的代码进行代码审查,以确保他们不使用他们不应该使用的方法。

我的猜测是后者是更便宜和更容易做的事情。我会把它变成内部的。

于 2010-05-20T07:17:08.390 回答
3

我相信正确的选择是internal。通过这种方式,您可以保护程序集之外的人不调用此方法,这只让您要小心,并且只能从派生类中调用此方法。在你编写的程序集中小心,比希望其他人在使用它时小心更容易。

于 2010-05-20T04:53:56.677 回答
1

做出protected internalmean protectedOR是一个奇怪的决定internal。对于这种精确的情况,我会使用internal. 原因是如果封装被破坏,我宁愿是我,而不是不受我控制的人。

于 2010-05-20T05:25:54.903 回答
0

我认为答案因您的需求而异。如果我是你,我会做这样的事情:

    public class YourClass
    {
       protected class InnerClass
       {
           internal void YourMethod()
           {
               // Your Code
           }
       }
    }
于 2010-05-20T05:53:16.710 回答