例如,所有的值类型都继承自System.ValueType;而System.ValueType则继承自System.Object;但是,System.ValueType重写了System.Object中关于实现值类型相关的语义.
System.Object.Equals方法有两个实现:
public virtual bool Equals( object obj)
public static bool Equals( object objA, object objB)
我们用反编译工具反编译System.dll得到这两个方法的实现源码:
bool Equals(object obj) { InternalEquals(, obj); } |
bool Equals(object objA, object objB) { (objA == objB) { ; } ((objA != ) && (objB != )) { objA.Equals(objB); } ; } |
[MethodImpl(MethodImplOptions.InternalCall)] bool InternalEquals |
在各个对象实现Equals的时候,引用类型大部分都重写了相关的语义,具体的对象中Equals的比较方式,
我们可以用ILDASM反汇编来得到IL中间代码.
等我过段时间研究下MSIL的语法,在引用一些更加具有说服力的反汇编中间代码.