黑马程序员技术交流社区

标题: 用面向对象的方法怎样判断两个对象是否相等?? [打印本页]

作者: 侯慧杰    时间: 2012-7-9 10:01
标题: 用面向对象的方法怎样判断两个对象是否相等??
class Test1
    {
        static void Main()
        {
            Goods g1 = new Num_Goods(3);
            g1.UnitPrice = 10;
            
            //g1.GetTotalPrice();
            Console.WriteLine(g1);
            
            Goods g2 = new Num_Goods(3);
            g2.UnitPrice = 10;
            if (g1.Equals(g2))//判断两个对象的引用是否相等
                Console.WriteLine(true);
            else
                Console.WriteLine(false);

        }
    }
   abstract class Goods
    {
        double unitPrice;

        public double UnitPrice
        {
            get { return unitPrice; }
            set { unitPrice = value; }
        }
        public Goods(double unitPrice)
        {
            this.unitPrice = unitPrice;
        }
        public Goods() { }
        public abstract double GetTotalPrice();//实现多态
    }
    class Num_Goods:Goods
    {
        int num;

        public int Num
        {
            get { return num; }
            set { num = value; }
        }
        public Num_Goods(int num) { this.num = num; }
        public override double GetTotalPrice()
        {
           return num*UnitPrice;
        }
        public override string ToString()//将对象以字符串的形式返回
        {
            return UnitPrice+" "+num+" "+GetTotalPrice();
        }

    }

为什么判断不出来啊啊 啊???:dizzy:
作者: 许庭洲    时间: 2012-7-9 10:26
if (g1.Equals(g2))//用if语句判断两个对象的引用是否相等,采用了Equals函数判断g1是否等于g2
        Console.WriteLine(true);//若相等,返回true
else
       Console.WriteLine(false);//若不相等,返回false
作者: 古古头    时间: 2012-7-9 19:02
你需要在Num_Goods类中重写Object的Equals方法,代码如下:
class Num_Goods:Goods
    {
        int num;

        public int Num
        {
            get { return num; }
            set { num = value; }
        }
        public Num_Goods(int num) { this.num = num; }
        public override double GetTotalPrice()
        {
           return num*UnitPrice;
        }
        public override string ToString()//将对象以字符串的形式返回
        {
            return UnitPrice+" "+num+" "+GetTotalPrice();
        }
      public override bool Equals(Object o)
      {
         Num_Goods ng = o as Num_Goos;
         return ng==null?false:ng.Num==Num && ng.UnitPrice==UnitPrice;
      }
    }

作者: 孙宁宇    时间: 2012-7-9 19:09
引用类型的使用ReferenceEquals()方法判断
这个是专门用于引用类型的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2