Tôi đang tìm cách xác định lớp lồng nhau có thể truy cập được vào lớp chứa và lớp bên ngoài, nhưng tôi muốn kiểm soát sự khởi tạo của lớp lồng nhau, các cá thể của lớp container có thể tạo ra các cá thể mới của lớp lồng nhau.Cho phép truy cập nhưng ngăn chặn việc tạo lớp lồng nhau bởi các lớp bên ngoài
Mã tục hy vọng sẽ chứng minh điều này:
public class Container
{
public class Nested
{
public Nested() { }
}
public Nested CreateNested()
{
return new Nested(); // Allow
}
}
class External
{
static void Main(string[] args)
{
Container containerObj = new Container();
Container.Nested nestedObj;
nestedObj = new Container.Nested(); // Prevent
nestedObj = containerObj.CreateNested(); // Allow
}
}
Nested
phải được công khai để cho nó có thể truy cập bằng cách External
. Tôi đã thử làm cho hàm tạo cho bảo vệ Nested
, tuy nhiên điều đó ngăn cản Container
tạo các cá thể, vì Container
không phải là lớp cơ sở là Nested
. Tôi có thể thiết lập các nhà xây dựng cho Nested
để internal
, nhưng tôi đang tìm cách để ngăn chặn truy cập vào constructor bởi tất cả các lớp bên ngoài, bao gồm cả những người trong cùng một hội đồng. Có cách nào để làm việc này không?
Nếu điều này không thể đạt được thông qua công cụ sửa đổi truy cập, tôi tự hỏi liệu tôi có thể ném ngoại lệ trong vòng Nested()
hay không. Tuy nhiên, tôi không biết cách kiểm tra ngữ cảnh trong đó new Nested()
được gọi.
Dường như làm việc! Cảm ơn! –