- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace CSharp基础
- {
- class 对象比较
- {
- public static void Main()
- {
- object obj1 = new object();
- object obj2 = new object();
- //ReferenceEquals方法比较两个对象是不是地址相同
- bool flag = Object.ReferenceEquals( obj1 , obj2 );
- Console.WriteLine( flag ); // false
- Console.WriteLine(Object.ReferenceEquals(null, null)); //true
- //虚拟的Equals()方法,有两个版本,一个静态版,一个虚方法版
- //虚方法可以自已重写,实现值的比较,如果年纪相等,我们就认为对象相等
- Person per1 = new Person( "aladdin" , 20 );
- Person per2 = new Person("zhao", 20);
- Console.WriteLine( per1.Equals( per2 ) );//因为年纪都是20,所以结果为true
- //静态Equals方法也有自已的用处,用来处理null的情况
- bool pflag1 = Person.Equals(null, null);
- bool pflag2 = Person.Equals(null, per2);
- bool pflag3 = Person.Equals( per1 ,per2 );
- Console.WriteLine(pflag1);//true 如果两个对象都为null,则返回true
- Console.WriteLine(pflag2);//false 如果有一个为null,返回false
- Console.WriteLine(pflag3);//true 如果没有null,则调用我们之前重写过的equals方法,也就是说重写虚方法,也相
- //当于是重写了静态的equals方法
- Console.ReadLine();
- }
- }
- class Person
- {
- public string name;
- public int age;
- public Person( string name , int age)
- {
- this.name = name;
- this.age = age;
- }
- public override int GetHashCode()
- {
- return this.age;
- }
- public override bool Equals(object obj)
- {
- Person per = obj as Person;
- if( per != null )
- {
- if( per.GetHashCode() == this.GetHashCode() )
- {
- return true ;
- }
- else
- {
- return false ;
- }
- }
- else
- {
- return false ;
- }
- }
- }
- }
c#中的3种对象比较方法
最新推荐文章于 2024-09-02 18:03:52 发布