一尘不染

为什么C#不提供C ++样式的“ friend”关键字?[关闭]

c#

C ++朋友关键字允许classA指定class B作为其朋友。这允许Class B访问的private/ protected成员class A

因此,总而言之,为什么friendC#缺少它?在C#中模拟它的“最佳实践”方法是什么?

(顺便说一句,internal关键字 不是 同一回事,它允许整个程序集中的 所有
类访问internal成员,而friend允许您为某个类 提供另一个 类的 完全访问权限


阅读 218

收藏
2020-05-19

共1个答案

一尘不染

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

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

值得一提的是:内部不如朋友好,但确实可以完成工作。请记住,很少会不通过DLL将代码分发给第三方开发人员。因此,只要您和您的团队了解内部类及其使用,您就可以了。

编辑 让我澄清一下,Friendly关键字如何破坏OOP。

私有和受保护的变量和方法可能是OOP的最重要部分之一。对象可以保存仅其可以使用的数据或逻辑的想法使您可以编写与环境无关的功能实现-
并且您的环境无法更改不适合处理的状态信息。通过使用friend,您将两个类的实现耦合在一起-如果您仅耦合两个类的接口,这会更糟。

2020-05-19