Trước hết, xin lỗi cho danh hiệu, nhưng tôi không thể nghĩ về bất cứ điều gì tốt hơn ...Generics và gọi phương pháp quá tải từ lớp khác biệt - ưu tiên vấn đề
Vấn đề của tôi có thể được trình bày bởi mẫu mã đơn giản:
public static class Test<T>
{
public static int GetInt(T source)
{
return Convert.ToInt32(source);
}
}
public static class Convert
{
public static int ToInt32(byte source)
{
return 30;
}
public static int ToInt32(object source)
{
return 10;
}
}
Tại sao Console.WriteLine(Test<byte>.GetInt(20));
in 10
, thay vì 30
?
Tôi luôn nghĩ rằng generics trong .NET được JIT giải quyết trong suốt thời gian chạy. Tại sao jitter không đủ thông minh, để tìm ra rằng có phương pháp ToInt32(byte)
, phù hợp với loại thông số byte
của chúng tôi ở đây?
Hành vi này làm cho Convert
phương thức lớp tĩnh kết quả cuộc gọi trong hoạt động boxing/unboxing cho các loại đơn giản.
'test .GetInt (byte.Parse ("20"))' trả 10 cũng mà tôi tìm thấy người lạ, Cửa sổ đồng hồ nói loại là đối tượng {byte} mà có thể đưa ra một số đầu mối như những gì đang có trên –
Sayse