今天,编程语言有这些众所周知的访问修饰符:私有,公共,内部和受保护。但有时当我以OOP方式编写程序时,我认为我需要一个特殊的'修饰符,可以手动指定我想允许访问的类。
现在我想知道语言设计师为什么不在编程语言中添加这样的修饰符,可能与OOP概念冲突,还是难以解决?
感谢您的回答:)
P.S。对不起,如果已经提出相同的问题。
答案 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
修饰符的作用。