Object类的用法(一)

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
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值