为什么编程语言不允许特定的类和#39;访问修饰符

时间:2016-04-06 06:47:22

标签: programming-languages

今天,编程语言有这些众所周知的访问修饰符:私有,公共,内部和受保护。但有时当我以OOP方式编写程序时,我认为我需要一个特殊的'修饰符,可以手动指定我想允许访问的类。

现在我想知道语言设计师为什么不在编程语言中添加这样的修饰符,可能与OOP概念冲突,还是难以解决?

感谢您的回答:)

P.S。对不起,如果已经提出相同的问题。

3 个答案:

答案 0 :(得分:2)

C#和VB.Net都具有friend assemblies的概念,其中指定的程序集可以访问指定程序集的内部成员。这允许您提供对特定调用者的临时访问,对此的检查在编译时完成。

  

只有您明确指定为朋友的程序集才能访问Friend(Visual Basic)或内部(C#)类型和成员。例如,如果程序集B是程序集A的朋友,程序集C引用程序集B,则C无法访问A中的Friend(Visual Basic)或内部(C#)类型。

现实情况是,此功能的合法用途有限(至少在这些语言中),除非您正在开发恶臭代码。

但是话说回来,定义谁可以调用它的类的想法是违反OOP的封装和抽象规则的边界。通过允许一个班级提名他们的来电者是谁,你允许班级拥有超出其领域的知识,并且你正在抛出良好的设计窗外。课程可以指定呼叫者应该呼叫的 ,但应该呼叫。

我希望这有点帮助 - 我个人期待更多学术语言导向的人的答案。

答案 1 :(得分:1)

答案 2 :(得分:0)

这正是C ++中friend修饰符的作用。