簡體   English   中英

C#對象比較

[英]C# object comparison

有人可以指出重載operator==來執行深度對象比較(而不是引用比較)的想法

來自MSDN:

默認情況下,運算符==通過確定兩個引用是否指示同一對象來測試引用是否相等。 因此,引用類型不必實現運算符==即可獲得此功能。 當類型是不可變的,即實例中包含的數據不能更改時,重載運算符==以比較值相等性而不是引用相等性是有用的,因為作為不可變對象,它們可以被認為與因為它們具有相同的價值。 在非不可變類型中覆蓋運算符==不是一個好主意。

什么時候真正受益?

而且,例如,如果每個對象都有方法Equals ,這使值比較成為可能,那么為什么有人會使用x == y語句執行 (而不是引用)比較?

我想我聽不懂什么,因為這對我來說很奇怪。

重載==運算符使您可以編寫x == y ,它比x.Equals(y)自然得多,即使x為null也會起作用。

重載運算符==僅可提高代碼的可讀性。 始終對定義的類型使用.Equals(),尤其是對於深層對象比較。

System.String是引用類型的經典示例,它受益於深度值相等比較而不是引用比較。

通常,在某些情況下,它使代碼更易於編寫,並且通過值比較比通過引用比較更好地表示相等性的含義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM