主要内容
1.四种比较对象
程序(1)示例:
namespace _45_对象的相等
{
internal class Program
{
static void Main(string[] args)
{
Cde f1 = new Cde(2);
Cde f2 = new Cde(2);
Console.WriteLine(Cde.ReferenceEquals(f1, f2));//静态方法,通过Object类来实现;Cde可以省略
Console.WriteLine(f1.Equals(f2));//实例Equals(),通过对象来实现,f1不能省略
Console.WriteLine(Cde.Equals(f1,f2));//类似ReferenceEquals()
Console.WriteLine(f1==f2);
}
}
class Cde
{
int a;
public Cde(int b)
{
a = b;
}
}
}
其返回结果均为False;
若在主函数中将f1赋给f2:
namespace _45_对象的相等
{
internal class Program
{
static void Main(string[] args)
{
Cde f1 = new Cde(2);
Cde f2 = f1;
Console.WriteLine(Cde.ReferenceEquals(f1, f2));//静态方法,通过Object类来实现;Cde可以省略
Console.WriteLine(f1.Equals(f2));//实例Equals(),通过对象来实现,f1不能省略
Console.WriteLine(Cde.Equals(f1,f2));//类似ReferenceEquals()
Console.WriteLine(f1==f2);
}
}
class Cde
{
int a;
public Cde(int b)
{
a = b;
}
}
}
其返回结果均为True;
2.重写Equals方法
重写Equals()后
namespace _45_对象的相等
{
internal class Program
{
static void Main(string[] args)
{
Cde f1 = new Cde(2);
Cde f2 = new Cde(2);
Console.WriteLine(Cde.ReferenceEquals(f1, f2));//静态方法,通过Object类来实现;Cde可以省略
Console.WriteLine(f1.Equals(f2));//实例Equals(),通过对象来实现,f1不能省略
Console.WriteLine(Cde.Equals(f1,f2));//类似ReferenceEquals()
Console.WriteLine(f1==f2);
f1.a = 43;
f2.a = 22;
Console.WriteLine(f1.a);
}
}
class Cde
{
public int a;
public Cde(int b)
{
a = b;
}
public override bool Equals(object obj)
{
if ((obj == null) || (obj.GetType()!=typeof(Cde)))
{
return false;
}
Cde f3=(Cde)obj;
if(f3.a==this.a) return true;//this表示调用这个方法的类的对象->f1.a
else return false;
}
}
}
输出结果为:
False
True
True
False
43