我有两个对象RoomManagerRoom,将有几个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/

10-17 01:53