Tôi tự hỏi liệu có cách nào để có thể sử dụng các phương thức giao diện chung bằng cách nào đó trong C#? Tôi đã tìm thấy những câu hỏi tương tự, nhưng không có gì chính xác như thế này. Bây giờ tôi nghi ngờ rằng câu trả lời là "Không, bạn không thể" nhưng tôi muốn có nó xác nhận.Chuyên môn về giao diện chung của C#
Những gì tôi có là một cái gì đó như sau.
public interface IStorage
{
void Store<T>(T data);
}
public class Storage : IStorage
{
public void Store<T>(T data)
{
Console.WriteLine("Generic");
}
public void Store(int data)
{
Console.WriteLine("Specific");
}
}
class Program
{
static void Main(string[] args)
{
IStorage i = new Storage();
i.Store("somestring"); // Prints Generic
i.Store(1); // Prints Generic
Storage s = (Storage)i;
s.Store("somestring"); // Prints Generic
s.Store(1); // Prints Specific
}
}
Có cách nào để sử dụng phiên bản Cửa hàng chuyên dụng khi được gọi thông qua giao diện không? Và nếu không, không ai biết lý do chính xác tại sao C# xử lý các đối số chung theo cách này?
Chỉnh sửa: Sự cố có thể được khắc phục nếu không phải vì vậy C# không thể giải quyết đối số mẫu trong nhiều bước.
void Foo<T>(T t)
{
SubFoo(t);
}
void SubFoo<T>(T t)
{
Console.WriteLine("Generic");
}
void SubFoo(int t)
{
Console.WriteLine("Specific");
}
Cuộc gọi tới Foo (1) ở đây cũng sẽ in "Chung", trình biên dịch có thể giải quyết vấn đề này không? Hoặc JIT có ngăn chặn điều này không?
Bản sao có thể có của [Cách thực hiện chuyên môn mẫu trong C#] (http://stackoverflow.com/questions/600978/how-to-do-template-specialization-in-c-sharp) –