你选择什么,保护什么或内部?

时间:2010-05-20 04:53:44

标签: c# protected internal access-levels

如果我的课程中包含我想要protectedinternal的方法。我希望只有程序集中的派生类才能调用它。

由于protected internal表示protected internal,您必须做出选择。在这种情况下您选择了什么 - protectedinternal

5 个答案:

答案 0 :(得分:6)

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

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

修改

为了澄清,一个类的内部可访问性是非常有用的,我并不暗示内部通常是坏的。我的观点是,在公共课上的内部方法对我来说似乎不对。正确设计的基类不应该对同一程序集中的派生类赋予不公平的优势。

答案 1 :(得分:5)

  

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

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

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

答案 2 :(得分:3)

我认为正确的选择是internal。这样,您可以保护程序集之外的人不会调用此方法,这只会让您小心并且只从派生类调用此方法。在你编写的程序集中要小心,而不是希望别人在使用它时要小心。

答案 3 :(得分:1)

protected internal表示protectedinternal是一个如此古怪的决定。对于这个确切的情况,我会使用internal。原因是,如果封装被破坏,我宁愿它是我,而不是那些不受我控制的人。

答案 4 :(得分:0)

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

    public class YourClass
    {
       protected class InnerClass
       {
           internal void YourMethod()
           {
               // Your Code
           }
       }
    }