猿问

朋友的C#等效项是什么?

我希望Tester类可以访问某个类的私有成员变量,而不要将它们暴露给其他类。

在C ++中,我只是将Tester类声明为朋友,如何在C#中做到这一点?有人可以给我一个例子吗?


潇潇雨雨
浏览 327回答 3
3回答

牛魔王的故事

没有“朋友”的直接等效项-可用的最接近(并且不是很接近)的是InternalsVisibleTo。我只用过此属性进行测试-非常方便!示例:放置在AssemblyInfo.cs[assembly: InternalsVisibleTo("OtherAssembly")]

Helenr

壁橱的等效项是创建一个嵌套类,该类将能够访问外部类的私有成员。像这样:class Outer{    class Inner    {       // This class can access Outer's private members    }}或者,如果您希望将Inner类放在另一个文件中:Outer.cspartial class Outer{}Inner.cspartial class Outer{    class Inner    {       // This class can access Outer's private members    }}

摇曳的蔷薇

采取非常常见的模式。类工厂制作小部件。Factory类需要对内部进行处理,因为它是Factory。两者都在同一个文件中实现,并且根据设计,需求和性质,它们是紧密耦合的类-实际上,Widget实际上只是工厂的一种输出类型。在C ++中,将Factory设为Widget类的朋友。在C#中,我们能做什么?我想到的唯一体面的解决方案是发明一个接口IWidget,该接口仅公开公共方法,并具有Factory返回的IWidget接口。这涉及大量的乏味-再次在界面中暴露所有自然的公共属性。
随时随地看视频慕课网APP
我要回答