我有一个类Server
与IRC的服务器连接对话.它包含已知User
s 的列表,并根据需要创建它们.
我有两个涉及User
课程的问题:
任何人都可以创建一个实例User
.我只希望Server
班级能够做到这一点.
如果用户(事物User
描述)更改了他/她的名字(或其他信息,如加入的频道),则Server
班级可以自行更改.但是,其他课程也可以!我想禁止其他类触及这些信息(使其只读给他们).
我该如何解决这两个问题?在C++中,可以通过使用friend
关键字并使ctor和setName
(等)私有来解决它.
是否有一个C#关键字可以允许某个方法可以被指定的类访问?这可以解决我的问题.
老实说,我发现friend
源自C++ 的访问权限是糟糕设计的症状.你最好修理你的设计.
首先,谁真的关心是否有人创建用户?真的有关系吗?我问这个问题是因为似乎有时我们的程序员会担心那些根本不会发生的事情,或者如果他们这样做,那就无关紧要了.
如果您真的关心,请执行以下操作之一:
使用户成为一个界面.服务器可以实例化实现它的私有类; 要么
使用户成为没有公共构造函数的服务器的内部类,因此只有服务器可以实例化它.
可见性黑客(其中C++中的朋友是一个,Java中的包访问都是很好的例子)只是在寻找麻烦而不是一个好主意.
.NET世界中最接近的friend
是internal
可见性.
请注意,如果您的两个类位于单独的程序集中,则可以使用InternalsVisibleTo属性来允许一个程序集可以看到另一个的内部.