Trong một câu hỏi StackExchange khác, tôi nhận thấy ai đó sử dụng nguyên mẫu này:
void DoSomething<T>(T arg) where T: SomeSpecificReferenceType
{
//Code....
}
Hãy nhớ rằng chỉ có một ràng buộc kiểu duy nhất ( SomeSpecificReferenceType
), sự khác biệt và lợi thế của việc viết nó như thế nào, thay vì chỉ đơn giản là:
void DoSomething(SomeSpecificReferenceType arg)
{
//Code....
}
Trong cả hai trường hợp, arg
sẽ phải kiểm tra kiểu biên dịch thời gian. Trong cả hai trường hợp, phần thân của phương thức có thể dựa một cách an toàn vào kiến thức arg
thuộc về (hoặc là hậu duệ) của một loại cụ thể được biết đến tại thời điểm biên dịch.
Đây có phải là một trường hợp của một nhà phát triển quá nhiệt tình tìm hiểu về thuốc generic trước khi tìm hiểu về thừa kế thông thường? Hoặc có một lý do chính đáng tại sao một chữ ký phương thức sẽ được viết theo cách này?