Tôi có một bộ sưu tập các lớp kế thừa từ một lớp trừu tượng mà tôi đã tạo. Tôi muốn sử dụng lớp trừu tượng như một nhà máy để tạo ra các cá thể triển khai thực hiện cụ thể của lớp trừu tượng của tôi.Có cách nào để tạo một hàm khởi tạo chỉ hiển thị với một lớp cha trong C#?
Có cách nào để ẩn một hàm tạo từ tất cả mã ngoại trừ một lớp cha.
Tôi muốn làm điều này về cơ bản
public abstract class AbstractClass
{
public static AbstractClass MakeAbstractClass(string args)
{
if (args == "a")
return new ConcreteClassA();
if (args == "b")
return new ConcreteClassB();
}
}
public class ConcreteClassA : AbstractClass
{
}
public class ConcreteClassB : AbstractClass
{
}
Nhưng tôi muốn ngăn chặn bất cứ ai từ trực tiếp instantiating 2 lớp bê tông. Tôi muốn đảm bảo rằng chỉ có phương thức MakeAbstractClass() mới có thể khởi tạo các lớp cơ sở. Có cách nào để làm điều này không?
CẬP NHẬT
Tôi không cần phải truy cập vào bất kỳ phương pháp cụ thể của ConcreteClassA hoặc B từ bên ngoài của lớp trừu tượng. Tôi chỉ cần các phương thức công khai mà lớp Abstract của tôi cung cấp. Tôi không thực sự cần phải ngăn các lớp Concrete được khởi tạo, tôi chỉ cố gắng tránh nó vì chúng không cung cấp các giao diện công cộng mới, chỉ các triển khai khác nhau của một số thứ rất cụ thể bên trong lớp trừu tượng.
Với tôi, giải pháp đơn giản nhất là make child classes as samjudson mentioned. Tôi muốn tránh điều này tuy nhiên vì nó sẽ làm cho tập tin lớp trừu tượng của tôi 'lớn hơn rất nhiều so với tôi muốn nó được. Tôi muốn giữ các lớp học tách ra trên một vài tập tin cho tổ chức.
Tôi đoán không có giải pháp dễ dàng nào cho việc này ...
Ví dụ hay, nhưng hãy đặt tên một chút .NETy và gọi nó là "CreateAbstractClass (string args)" vì lợi ích mã hóa tiêu chuẩn :) –