如果我的一類做的operator ==
超載,我一定要比較的字段之前進行一些檢查:平等運營商結構重載和類
如果兩個參數都爲空,或者兩個參數是相同的實例,則返回true
例子:
if (System.Object.ReferenceEquals(arg1, arg2)) return true;
如果爲空,但不同時,則返回false
例子:
if (((object)arg1 == null) || ((object)arg2 == null)) return false;
事實上,如果我有一個結構,我想做的operator ==
超載,這些檢查是沒有必要的,而他們是沒用的,有以下原因:一個結構是值類型爲,因此它不能爲空,例如DateTime date = null;
無效,因爲DateTime
(即一個結構體)不是一個引用類型,所以無法比較兩個DateTime
,其中之一設置爲null
。
我創建了一個簡單的結構Point2D
與operator ==
的話,我比較Point2D
的實例與null
:
Point2D point = new Point2D(0,0);
Console.WriteLine((point == null));
顯然
operator ==
它不叫,但比較返回False
。哪種方法被稱爲?documentation指出不推薦在非不可變類型中重載此運算符。爲什麼?
您應該嘗試一次只詢問一個問題。如果你有兩個問題,請分別提問。 – svick 2012-02-08 01:40:25
@svick:對不起。對於接下來的問題,我會避免這一點。 – enzom83 2012-02-08 01:50:36