为什么C#不提供C风格的“朋友”关键字?

C++ friend keyword允许A类将B类指定为其朋友.这允许B类访问A类的私有/受保护成员.

我从来没有读过任何关于为什么这个被排除在C#(和VB.NET)之外的东西.这个earlier * question的大多数答案似乎都说它是C的有用部分,并且有充分的理由使用它.根据我的经验,我必须同意.

在我看来,另一个question真的要问如何在C#应用程序中做一些类似于朋友的事情.虽然答案通常围绕嵌套类,但它看起来并不像使用friend关键字那样优雅.

原始Design Patterns book在其示例中定期使用它.

总而言之,为什么C#中缺少朋友,在C#中模拟它的“最佳实践”方式是什么?

(顺便说一句,内部关键字不是同一个东西,它允许整个程序集中的所有类访问内部成员,而朋友允许您给某个类完全访问其他一个类)

解决方法:

让编程中的朋友或多或少地被认为是“肮脏的”并且容易被滥用.它打破了类之间的关系,破坏了OO语言的一些基本属性.

话虽如此,这是一个很好的功能,我自己在C中使用了很多次;并且也希望在C#中使用它.但我打赌因为C#的“纯粹”OOness(与C的伪OOness相比)MS决定因为Java没有朋友关键字C#也不应该(开玩笑;))

严肃地说:内部不如朋友好,但确实完成了工作.请记住,您很少会通过DLL将代码分发给第三方开发人员;因此,只要您和您的团队了解内部课程及其使用情况,您就应该没问题.

编辑让我澄清一下friend关键字如何破坏OOP.

私有和受保护的变量和方法可能是OOP最重要的部分之一.对象可以保存只有他们可以使用的数据或逻辑的想法允许您编写独立于您的环境的功能实现 – 并且您的环境不能改变它不适合处理的状态信息.通过使用朋友,您将两个类的实现结合在一起 – 如果您只是将它们的接口耦合在一起则更糟糕.

上一篇:Codeforces Round #616 (Div. 2) F. Coffee Varieties 交互题


下一篇:c – 我们能否增加这种面向密钥的访问保护模式的可重用性?