如果我的课程中包含我想要protected
和internal
的方法。我希望只有程序集中的派生类才能调用它。
由于protected internal
表示protected
或 internal
,您必须做出选择。在这种情况下您选择了什么 - protected
或internal
?
答案 0 :(得分:6)
就个人而言,我会选择受保护。如果您自己的程序集中的子类足以调用该方法,为什么不在另一个程序集中的子类?也许你可以将功能重构为一个单独的(内部)类。
你真的需要客观地思考方法的目的。内部可访问性几乎总是让我觉得不对。主要是因为我尝试从.NET框架中的控件或类派生出来的经验,因为有人决定将类或方法标记为内部。原作者从未注意到无法访问该方法使得实现子类变得更加困难。
修改强>
为了澄清,一个类的内部可访问性是非常有用的,我并不暗示内部通常是坏的。我的观点是,在公共课上的内部方法对我来说似乎不对。正确设计的基类不应该对同一程序集中的派生类赋予不公平的优势。
答案 1 :(得分:5)
那么,你有两个选择。你可以让它受到保护,每当你的一个客户扩展你的课程并调用你的方法并且你发现它时,你可以写一封严厉措辞的信,告诉他们请停止这样做。或者您可以将其设置为内部,并对您的同事代码进行代码审查,以确保他们不使用他们不应该使用的方法。我希望只有程序集中的派生类才能调用它。
我的猜测是,后者是更便宜,更容易做的事情。我把它做成内部的。
答案 2 :(得分:3)
我认为正确的选择是internal
。这样,您可以保护程序集之外的人不会调用此方法,这只会让您小心并且只从派生类调用此方法。在你编写的程序集中要小心,而不是希望别人在使用它时要小心。
答案 3 :(得分:1)
让protected internal
表示protected
或internal
是一个如此古怪的决定。对于这个确切的情况,我会使用internal
。原因是,如果封装被破坏,我宁愿它是我,而不是那些不受我控制的人。
答案 4 :(得分:0)
我认为答案会因您的需要而异。 如果我是你,我会做这样的事情:
public class YourClass
{
protected class InnerClass
{
internal void YourMethod()
{
// Your Code
}
}
}