using System;
using System.Collections.Generic;
using System.Text;
namespace Object.ReferenceEquals_方法
{
class Program
{
static void Main(string[] args)
{
A x = new A();
A y = new A();
//A x = null;
//A y = null;
//A x; //与上面加null的不等价 提示错误是:使用了未赋值的局部变量“x"
//A y; //与上面加null的不等价
//public static bool ReferenceEquals
// (
// Object objA,
// Object objB
// )
//确定指定的 Object 实例是否是相同的实例。
//如果 objA 是与 objB 相同的实例,或者如果二者都为空引用,则为 true;否则为 false。
bool m =object.ReferenceEquals(x, y); //等价于bool m =A.ReferenceEquals(x, y);同下面的Equals方法
Console.WriteLine(m); //还等价于 bool m = B.ReferenceEquals(x, y);
bool n = Program.Equals(x, y); //这里有点奇怪可以把Program换成A,也可以把Program去掉,等价于n =x.Equals(y);
Console.WriteLine(n);
x = y;
n =object.Equals(x, y); //等价于n =A.Equals(x, y); 还等价于n =x.Equals(y);
Console.WriteLine(n);
Console.ReadKey();
}
}
class A{}
class B{}
}
//对于类的实例的比较,这三种方法是作用是一样的,都是比较引用
//所有的类和结构(包裹自定义的)都具有Equals(带一个参数的,Equals(带两个参数的),GetHashCode,GetType,ReferenceEquals,ToString 六个方法
//所有的类和结构(包裹自定义的)的Equals(带两个参数的),ReferenceEquals和GetType方法都是从Object类继承的,因为他们不是虚拟方法
//所以这3个方法一定不是重写的,而其他三个方法都是虚拟的,可以重写。其中Equals(带两个参数的)和ReferenceEquals是静态方法,而GetType方法是实例方法
//Equals(带一个参数的,Equals(带两个参数的)和ReferenceEquals方法的返回值类型为bool
//GetType方法返回值类型为System.Type
//GetHashCode方法返回值类型为int