Eri*_*ert 11
更新:这个问题是我的博客2012年11月13日的主题.谢谢你这个好问题!
为什么在C#中,派生类不允许具有比其基类更大的可访问性?
除了其他好的答案,请考虑这种情况.你和你的同事爱丽丝正在研究同一组件的不同部分.爱丽丝写了一堂课:
public class ComplicatedClass
{
public void DoDangerousThing() { ... }
}
Run Code Online (Sandbox Code Playgroud)
然后你写
public class EvenMoreComplicatedClass : ComplicatedClass
{
}
Run Code Online (Sandbox Code Playgroud)
大.现在,Alice从Bob获得安全审查,并且他们意识到(1)没有客户需要使用ComplicatedClass,以及(2)DoDangerousThing暴露了恶意代码可以利用的安全漏洞.内部代码当然没有.
所以Alice将她的代码更改为
internal class ComplicatedClass
{
public void DoDangerousThing() { ... }
}
Run Code Online (Sandbox Code Playgroud)
确定没有必要在方法上将"公共"更改为"内部",因为当然公共意味着"公共事物可以看到这个类",现在没有外部代码可以看到这个类.
当Alice使用此更改重新编译时,您的代码会发生什么? 它应该无法编译.您假设用户需要查看基类,并且Alice已做出违反该假设的更改.安全的做法是让编译器告诉Alice她需要和你谈谈,这样你就可以解决这个问题,而不会让客户暴露在DoDangerousThing的漏洞之下.
为什么在Java中允许它?
不知道,对不起.
| 归档时间: |
|
| 查看次数: |
1330 次 |
| 最近记录: |