为什么编程语言没有"允许特定类"访问修饰符

arm*_*oyl 5 programming-languages

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

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

谢谢你的回答 :)

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

slu*_*ter 3

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

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

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

但话虽如此,类定义谁可以调用它的想法已经违反了 OOP 的封装和抽象规则。通过允许一个类指定它的调用者是谁,你可能会允许该类拥有超出其领域的知识,并且你将好的设计扔到了窗外。类可以规定调用者应该如何调用,但不能规定应该调用。

我希望这会有所帮助 - 就我个人而言,我期待更多以学术语言为导向的人的答案。