设为首页 加入收藏

TOP

c# Equal函数 and 运算符'==' (原发布 csdn 2017年10月15日 20:39:26)(六)
2019-09-17 15:14:57 】 浏览:54
Tags:Equal 函数 and 运算 ' 发布 csdn 2017年 10月 15日 20:39:26
alsHelper(a, b));//返回true } { char[] ch = new char[] { 'a', 'A', '@' }; string a = "aA@"; string b = new string(ch); Console.WriteLine(EqualsHelper(a, b));//返回true }

4.1.8、结论:string类型 a == b、string.Equals(a, b)、a.Equals(b)、a.Equals((object)b),如果 a 的值与 b 的值相同,则为 true;否则为 false。

4.2、类class

4.2.1、C#语言规范5.0中文版中的引用类型相等运算符介绍

这里写图片描述
这里写图片描述

4.2.2、Object内部的Equals函数

        Object
        {
            public virtual bool Equals(Object obj)
            {
                return RuntimeHelpers.Equals(this, obj);//无法查到详细代码
            }
         
            public static bool Equals(Object objA, Object objB) 
            {
                if (objA==objB) {
                    return true;
                }
                if (objA==null || objB==null) {
                    return false;
                }
                return objA.Equals(objB);
            }
         
            [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
            [System.Runtime.Versioning.NonVersionable]
            public static bool ReferenceEquals (Object objA, Object objB) {
                return objA == objB;
            }
        } 

4.2.3、类(不重写Equal函数 and 运算符'==')

    public class RefPoint
    {
        public double x;
        public double y;
        public double z;

        public RefPoint(double X, double Y, double Z)
        {
            this.x = X;
            this.y = Y;
            this.z = Z;
        }
    }
    
            RefPoint p1 = new RefPoint(4, 5, 6);
            RefPoint p2 = p1;
            Console.WriteLine(p1.Equals(p2));//返回true
            Console.WriteLine(object.Equals(p1, p2));//返回true
            Console.WriteLine(object.ReferenceEquals(p1, p2));//返回true
            Console.WriteLine(p1 == p2);//返回true

            p2 = new RefPoint(4, 5, 6);//虽然值一样,但是引用对象不一样
            Console.WriteLine(p1.Equals(p2));//返回false
            Console.WriteLine(object.Equals(p1, p2));//返回false
            Console.WriteLine(object.ReferenceEquals(p1, p2));//返回false
            Console.WriteLine(p1 == p2);//返回false

4.2.4、类(重写Equal函数 and 运算符'==')

    public class RefPoint
    {
        public double x;
        public double y;
        public double z;

        public RefPoint(double X, double Y, double Z)
        {
            this.x = X;
            this.y = Y;
            this.z = Z;
        }

        public override bool Equals(Object obj)
        {
            if (!(obj is RefPoint))
            {
                return false;
            }

            if (((RefPoint)obj).x == this.x)
            {
                return true;
            }

            return false;
        }

        public bool Equals(RefPoint obj)
        {
            if (obj.x == this.x)
            {
                return true;
            }

            return false;
        }

        public static bool operator ==(RefPoint left, RefPoint right)
        {
            return left.x == right.x;
        }

        public static bool operator !=(RefPoint left, RefPoint right)
        {
            return left.x != right.x;
        }
    }

            RefPoint p1 = new RefPoint(4, 5, 6);
            RefPoint p2 = p1;
            Console.WriteLine(p1.Equals(p2));//返回true
            Console.WriteLine(object.Equals(p1, p2));//返回true
            Console.WriteLine(object.ReferenceEquals(p1, p2));//返回true
            Console.WriteLine(p1 == p2);//返回true

            p2 = new RefPoint(4, 50, 60);
            Console.WriteLine(p1.Equals(p2));//返回true
            Console.WriteLine(object.Equals(p1, p2));//返回true
            Console.WriteLine(object.ReferenceEquals(p1, p2));//返回false
            Console.WriteLine(p1 == p2);//返回true

4.2.5、ReferenceEquals (Object objA, Object objB)返回objA == objB。如果objA、 objB引用同一个对象(只判断是否引用同一个对象,即使我们自行重载了'=='运算符,也没用),返回true;否则,返回false。

5、总结

先介绍简单值类型,再到结构体,字符串,类。把每个类型Equal和'=='用法做个总结,加深自己记忆的同时,也希望能帮助到你。另:本文只代表本人观点,如果有误,还望告知。

6、参考

6.1、C#类型基础

6.2、 C#语言规范5.0中文版

6.3、Reference Source

首页 上一页 3 4 5 6 下一页 尾页 6/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇asp.net core 之中间件 下一篇c# "As" 与 "Is&q..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目