我有两个对象RoomManager
和Room
,将有几个Room
和一个RoomManager
。我希望RoomManager
是允许创建Room
对象的唯一对象。所以我想知道是否有一种方法可以使Room
只能访问Room
构造函数(以及其他RoomManager
方法/属性)。我在想也许将它们移到自己的 namespace ,并将Room
设为私有(private)或内部或其他内容。从Accessibility Levels (C# Reference)中,我看到内部是用于整个程序集的,而不仅仅是命名空间。
最佳答案
不,C#(通常是.NET)没有特定于 namespace 的访问修饰符。
一个相当不错的解决方案是使Room仅具有一个私有(private)构造函数,并使RoomManager成为嵌套类(可能仅称为Manager):
public class Room
{
private Room() {}
public class Manager
{
public Room CreateRoom()
{
return new Room(); // And do other stuff, presumably
}
}
}
像这样使用它:
Room.Manager manager = new Room.Manager();
Room room = manager.CreateRoom();
正如我说的那样,这有点不客气。当然,您可以将Room和RoomManager放在自己的程序集中。
关于C#将类实例的创建限制在 namespace 内,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5645607/