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