Tôi chỉ gặp một vài thứ khá kỳ lạ với tôi: khi bạn sử dụng phương thức Equals() trên một loại giá trị (và nếu phương pháp này không được overriden, tất nhiên) bạn nhận được một cái gì đó rất rất. một đến một bằng cách sử dụng sự phản ánh! Như trong:C# - Phương thức kiểu giá trị bằng - tại sao trình biên dịch sử dụng sự phản chiếu?
public struct MyStruct{
int i;
}
(...)
MyStruct s, t;
s.i = 0;
t.i = 1;
if (s.Equals(t)) /* s.i will be compared to t.i via reflection here. */
(...)
Câu hỏi của tôi: tại sao trình biên dịch C# không tạo ra một phương pháp đơn giản để so sánh các loại giá trị? Một cái gì đó tương tự (trong định nghĩa MyStruct của):
public override bool Equals(Object o){
if (this.i == o.i)
return true;
else
return false;
}
Trình biên dịch biết các lĩnh vực MyStruct tại thời gian biên dịch là gì, tại sao nó đợi cho đến khi thời gian chạy để liệt kê các lĩnh vực MyStruct?
Rất lạ đối với tôi.
Cảm ơn :)
THÊM: Xin lỗi, tôi chỉ nhận ra rằng, tất nhiên, Equals
không phải là một từ khóa ngôn ngữ nhưng một phương pháp runtime ... Trình biên dịch là hoàn toàn không biết gì về phương pháp này. Vì vậy, nó tạo cảm giác ở đây để sử dụng sự phản chiếu.
xem "Để sử dụng triển khai chuẩn của Equals, kiểu giá trị của bạn phải được đóng hộp và thông qua như là một thể hiện của loại tài liệu tham khảo System.ValueType. Các Bằng phương pháp sau đó sử dụng phản ánh để thực hiện các so sánh. " - msdn.microsoft.com/en-us/library/ff647790.aspx – MrPhil