Tôi có một lớp trong C# với một mẫu và phương pháp tĩnh tương tự nhưTạo Generic Class Instance từ Phương pháp tĩnh trong một lớp có nguồn gốc
class BClass<T>
{
public static BClass<T> Create()
{
return new BClass<T>();
}
}
Từ này tôi lấy được một lớp và chỉ định một mẫu tham số để các lớp cơ sở
class DClass : BClass<int> { }
một vấn đề xảy ra khi tôi cố gắng sử dụng các phương pháp tĩnh để tạo ra một thể hiện của D
class Program
{
static void Main(string[] args)
{
DClass d = DClass.Create();
}
}
Cung cấp lỗi trình biên dịch "Không thể chuyển đổi hoàn toàn loại 'Test.BClass < int>' thành 'Test.DClass'."
Thêm các dẫn truyền dưới đây vào ngoại lệ truyền thời gian chạy.
DClass d = (DClass)DClass.Create();
Có cách nào để cho phép phương pháp tĩnh tạo ra các phiên bản của lớp dẫn xuất không? Lý tưởng nhất là tôi muốn tương đương với một C++ typedef và tôi không muốn cú pháp dưới đây (mà không làm việc).
BClass<int> d = DClass.Create();
Bạn không nghĩ rằng lớp học có thể tham chiếu chính nó như một tham số kiểu trong siêu lớp của nó? Nghịch lý gà và trứng hoặc một cái gì đó ... –
Thông minh và một chút kỳ quái! ;) Những bất lợi duy nhất tôi thấy ở đây là có vẻ như không bao giờ có cách nào để khởi tạo một đồng tiền cũ 'BClass', như trong mã ban đầu của OP. –
@Peter, tôi thực sự đã sử dụng thành công điều này khá nhiều. Ví dụ, nó cũng cho phép bạn tạo một phương pháp sao chép tốt hơn vì nó loại bỏ sự cần thiết phải tái diễn,… – Lucero