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

bri*_*ner 8 c# protected internal access-levels

如果我有一个类我想要的方法protectedinternal.我希望只有程序集中的派生类才能调用它.

由于protected internal手段protected 或者 internal,你必须做出选择.在这种情况下你选择什么 - protected或者internal

Jos*_*osh 6

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

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

编辑

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

  • 来自我的+1.我认为我不必使用`internal`. (2认同)

Eri*_*ert 5

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

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

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

  • **可能有第三种选择.**OP可以使*整个类*内部,在这种情况下,对该方法的`protected`访问将实现所需的行为.程序集外部的代码可以通过公共接口访问类的功能.这可能足以实现OP的期望行为.当然,缺点是程序集之外的所有继承都将被禁止......但OP确实没有明确表示这是一项要求. (3认同)