C# Object.Equals方法深入研究
阿新 • • 發佈:2019-02-05
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得到這兩個方法的實現原始碼:
我們進一步深究InteralEquals方法,得到下面的實現:
這裡我們可以看到Equals在實現的過程中的呼叫順序和原理.
在各個物件實現Equals的時候,引用型別大部分都重寫了相關的語義,具體的物件中Equals的比較方式,
我們可以用ILDASM反彙編來得到IL中間程式碼.
等我過段時間研究下MSIL的語法,在引用一些更加具有說服力的反彙編中間程式碼.
例如,所有的值型別都繼承自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) { ( |
這裡我們可以看到Equals在實現的過程中的呼叫順序和原理.
在各個物件實現Equals的時候,引用型別大部分都重寫了相關的語義,具體的物件中Equals的比較方式,
我們可以用ILDASM反彙編來得到IL中間程式碼.
等我過段時間研究下MSIL的語法,在引用一些更加具有說服力的反彙編中間程式碼.