设为首页 加入收藏

TOP

c# Equal函数 and 运算符'==' (原发布 csdn 2017年10月15日 20:39:26)(三)
2019-09-17 15:14:57 】 浏览:57
Tags:Equal 函数 and 运算 ' 发布 csdn 2017年 10月 15日 20:39:26
, obj);

3.2.3.3、结论:程序判断struct里面所有字段的值,如果全部相等,返回true;否则,返回false。

3.2.4、复杂结构体(有值类型、引用类型,重写Equal函数 and 运算符'==')

3.2.4.1、测试代码:

    public struct ValPoint
    {
        public double x;
        public double y;
        public double z;

        public ValPoint(double X, double Y, double Z)
        {
            this.x = X;
            this.y = Y;
            this.z = Z;
        }
        
        public static bool operator ==(ValPoint left, ValPoint right)
        {
            return left.x == right.x;
        }

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

    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 struct ValLine
    {
        public ValPoint vPoint;       // 值类型成员

        public RefPoint rPoint;       // 引用类型成员

        public ValLine(ValPoint vPoint, RefPoint rPoint)
        {
            this.vPoint = vPoint;
            this.rPoint = rPoint;
        }

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

            if (((ValLine)obj).vPoint == this.vPoint)
            {
                return true;
            }

            return false;
        }

        public bool Equals(ValLine obj)
        {
            if (obj.vPoint == this.vPoint)
            {
                return true;
            }

            return false;
        }

        public static bool operator ==(ValLine left, ValLine right)
        {
            return left.vPoint == right.vPoint;
        }

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


    ValPoint vPoint = new ValPoint(1, 2, 3);
    ValPoint vPoint2 = new ValPoint(1, 2, 3);
    ValPoint vPoint3 = new ValPoint(10, 20, 30);
    RefPoint rPoint = new RefPoint(4, 5, 6);
    RefPoint rPoint2 = new RefPoint(7, 8, 9);

    ValLine p1 = new ValLine(vPoint, rPoint);
    ValLine p2 = p1;

    p2.vPoint = vPoint2;
    Console.WriteLine(p1 == p2); //返回true
    Console.WriteLine(p1.Equals(p2)); //返回true
    Console.WriteLine(p1.Equals((object)p2)); //返回true

    p2 = p1;
    p2.vPoint = vPoint3;
    Console.WriteLine(p1 == p2); //返回true
    Console.WriteLine(p1.Equals(p2)); //返回false
    Console.WriteLine(p1.Equals((object)p2)); //返回false

    p2 = p1;
    p2.rPoint = rPoint2;
    Console.WriteLine(p1 == p2); //返回true
    Console.WriteLine(p1.Equals(p2)); //返回true
    Console.WriteLine(p1.Equals((object)p2)); //返回true

3.2.4.2、结论:此时程序执行我们重写的Equal函数 and 运算符'=='。

3.2.5、复杂结构体(内部值类型、引用类型,不重写Equal函数 and 运算符'==')

3.2.5.1、测试代码:

    public struct ValPoint
    {
        public double x;
        public double y;
        public double z;

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

    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 struct ValLine
    {
        public ValPoint vPoint;       // 值类型成员

        public RefPoint rPoint;       // 引用类型成员

        public ValLine(ValPoint vPoint, RefPoint rPoint)
        {
            this.vPoint = vPoint;
            this.rPoint = rPoint;
        }
    }


    ValPoint vPoint = new ValPoint(1, 2, 3);
    ValPoint vPoint2 = new ValPoint(1, 2, 3);
    ValPoint vPoint3 = new ValPoint(10, 20, 30);
    RefPoint rPoint = new RefPoint(4, 5, 6);
    RefPoint rPoint2 = new RefPoint(7, 8, 9);

    ValLine p1 = new ValLine(vPoint, rPoint);
    ValLine p2 = p1;

    Console.WriteLine(p1 == p2);//编译错误:运算符"=="无法应用于"Point"和"Point"类型的操作数

    p2.vPoint = vPoint2;
    Console.WriteLine(p1.Equals(p2)); //返回true
    Console.WriteLine(p1.Equals((object)p2)); //返回true

    p2 = p1;
    p2.vPoint = vPoint3;
    Console.WriteLine(p1.Equals(p2)); //返回false
    Console.WriteLine(p1.Equals((object)p2)); //返回false
    
    p2 =
首页 上一页 1 2 3 4 5 6 下一页 尾页 3/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇asp.net core 之中间件 下一篇c# "As" 与 "Is&q..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目