Ngoài câu trả lời của Jon điều này giải thích C# bên của sự vật, đây là những gì VB không:
Trong VB với Option Strict On
, một sự so sánh qua =
luôn xét nghiệm cho giá trị bình đẳng và không bao giờ cho bình đẳng tham khảo. Trên thực tế, mã của bạn thậm chí không biên dịch khi bạn chuyển đổi Option Strict On
vì System.Object
không xác định Operator=
. Bạn nên luôn luôn có tùy chọn này trên, nó bắt lỗi hiệu quả hơn một flytrap venus (mặc dù trong trường hợp cụ thể của bạn hành vi lỏng lẻo này thực sự làm điều đúng).
Trong thực tế, với Option Strict On
, VB cư xử thậm chí khắt khe hơn so với C#: Trong C#, a == b
hai gây nên một cuộc gọi đến SomeType.operator==(a, b)
hoặc, nếu điều này không tồn tại, chảy sệ so sánh bình đẳng tham khảo (tương đương với gọi số object.ReferenceEquals(a, b)
).
Trong VB, việc so sánh a = b
luôn luôn gọi toán tử bằng. Nếu bạn muốn sử dụng so sánh bình đẳng tham chiếu, bạn phải sử dụng a Is b
(tức là, một lần nữa, giống như Object.ReferenceEquals(a, b)
).
1) Dưới đây là một dấu hiệu tốt vì sao sử dụng Option Strict Off
là một ý tưởng tồi: Tôi đã sử dụng VB.NET trong gần một thập kỷ, từ trước khi phát hành chính thức của .NET cho đến khi một vài năm trước đây, và tôi hoàn toàn không có ý tưởng những gì a = b
thực hiện với Option Strict Off
. Nó thực hiện một số loại so sánh bình đẳng, nhưng những gì chính xác xảy ra và tại sao, không có ý tưởng. Nó phức tạp hơn so với tính năng dynamic
của C#, mặc dù (vì điều đó phụ thuộc vào API được ghi chép đầy đủ).Here’s what the MSDN says:
Vì Option Strict On
cung cấp gõ mạnh, ngăn chặn chuyển đổi loại hình ngoài ý muốn với sự mất mát dữ liệu, không cho phép vào cuối ràng buộc, và cải thiện hiệu suất, sử dụng của nó được khuyến khích mạnh mẽ.
2) Jon đã đề cập đến một ngoại lệ, chuỗi, khi so sánh bình đẳng thực hiện một số điều khác vì lý do tương thích ngược.
nếu bạn thay đổi trình so sánh bình đẳng thành 'a.Equals (b)' thì sao? –
Đây là một câu hỏi hay cho mục đích sư phạm. – Lobo
Bởi vì mã VB.NET của bạn không bằng mã C# của bạn. –