Hãy nói rằng tôi có giao diện như thế và thực hiện cụ thểGiao diện với tham số generic vs Interface với các phương pháp chung
public interface IMyInterface<T>
{
T My();
}
public class MyConcrete : IMyInterface<string>
{
public string My()
{
return string.Empty;
}
}
Vì vậy, tôi tạo thực hiện MyConcrete cho strings
, tôi có thể có thêm một thực hiện cụ thể cho int
. Và đó là ok. Nhưng giả sử, mà tôi muốn làm điều tương tự, nhưng với các phương pháp thông thường, vì vậy tôi có
public interface IMyInterface2
{
T My<T>();
}
public class MyConcrete2 : IMyInterface2
{
public string My<string>()
{
throw new NotImplementedException();
}
}
Vì vậy, tôi có cùng IMyInterface2
, nhưng trong đó xác định hành vi chung bằng phương pháp T My<T>()
. Trong lớp bê tông của tôi, tôi muốn thực hiện hành vi My
, nhưng đối với loại dữ liệu cụ thể - string
. Nhưng C# không cho phép tôi làm điều đó.
Câu hỏi của tôi là tại sao tôi không thể làm điều đó? Nói cách khác, nếu tôi có thể tạo triển khai cụ thể MyInterface<T>
là MyClass : MyInterface<string>
và dừng tính chung chung tại thời điểm này, tại sao tôi không thể thực hiện điều đó bằng phương pháp chung - T My<T>()
?
Bạn không thể * giảm * khả năng khi kế thừa các loại, bạn chỉ có thể thêm vào chúng. –