Нет, C # (и .NET в целом) не имеет модификаторов доступа, специфичных для пространств имен.
Одним из довольно хакерских решений было бы сделать Room просто иметь приватный конструктор и сделать 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 в отдельную сборку.