Có thể hạn chế tham số kiểu để triển khai thực hiện cụ thể của lớp trừu tượng không, nếu những triển khai đó không có các hàm tạo mặc định?Thêm ràng buộc tham số kiểu để ngăn các lớp trừu tượng
Ví dụ, nếu tôi có:
public abstract class Animal
{
private Animal()
{
}
public Animal(string name)
{
// ...
}
// ...
}
public class Penguin : Animal
{
// ...
}
public class Chimpanzee : Animal
{
// ...
}
Và tôi cũng có lớp sau đây:
public class ZooPen<T>
where T : Animal
{
// ...
}
Tôi muốn cho phép new ZooPen<Penguin>()
và new ZooPen<Chimpanzee>()
, nhưng tôi muốn để không cho phép new ZooPen<Animal>()
.
Điều này có khả thi không?
Tại sao bạn cần hạn chế này? Là nó để tạo ra các lớp con bằng cách sử dụng một constructor bạn nhận được bằng cách phản ánh? Nếu vậy, tại sao không chỉ thêm một kiểm tra thời gian chạy mà làm cho nó rõ ràng * tại sao * các hạn chế là có thay vì một lỗi biên dịch có khả năng gây nhầm lẫn thời gian từ hacks đề xuất. – millimoose
Tôi đồng ý với millimoose. Các hạn chế có mùi xấu với tôi. Nếu bạn cần tạo các cá thể mới trong Bút Zoo, thì bạn có thể làm cho nó lấy một nhà máy làm đối số hàm tạo. – StriplingWarrior
@StriplingWarrior, tôi bắt đầu đồng ý. millimoose đúng là lớp có tham số kiểu là instantiating các lớp con thông qua sự phản chiếu. Dù sao tôi đang suy nghĩ lại làm thế nào tôi sẽ xử lý này, vì vậy cảm ơn cho đề nghị này. – Andrew