1. 程式人生 > >C# Object.Equals方法深入研究

C# Object.Equals方法深入研究

System.Object物件是所有託管型別直接或者間接的繼承類.
例如,所有的值型別都繼承自System.ValueType;而System.ValueType則繼承自System.Object;但是,System.ValueType重寫了System.Object中關於實現值型別相關的語義.

System.Object.Equals方法有兩個實現:
public virtual bool (object obj)
public static bool (object objA, object objB)
我們用反編譯工具反編譯System.dll得到這兩個方法的實現原始碼:
  bool (object objA, object objB)
            {
             (
objA
== objB) { ; } ((objA != ) && (objB != )) { objA.Equals(objB); } ; }
我們進一步深究InteralEquals方法,得到下面的實現:
這裡我們可以看到Equals在實現的過程中的呼叫順序和原理.

在各個物件實現Equals的時候,引用型別大部分都重寫了相關的語義,具體的物件中Equals的比較方式,
我們可以用ILDASM反彙編來得到IL中間程式碼.
等我過段時間研究下MSIL的語法,在引用一些更加具有說服力的反彙編中間程式碼.