今天刚学习了重写EQUALS方法
但是好像没听懂 也不知道它的实现机制是什么
好像也不是很清楚到底该怎么用
如下是我的代码:
public static void Main(string[] args)
{
//生成泛型LIST
List<Car> list = new List<Car>();
Car car1 = new Bus("公公1","黑色",20);
Car car2 = new Bus("公公2", "黑色", 20);
Car car3 = new Bus("公公3", "黑色", 20);
//添加元素到LIST
list.Add(car1);
list.Add(car2);
list.Add(car3);
//添加相同项
Bus car4 = new Bus("公公2", "黑色", 20);
list.Add(car4);
//移除此项
list.Remove(car4);
//遍历输出RUN方法
foreach(Bus bus in list)
{
bus.Run();
}
Console.Read();
}————————————————————————————————————————————
这是我的重写EQUALS public override bool Equals(object obj)
{
Bus bus= obj as Bus;
if (bus == null) return false;
if (bus.Color == this.Color && bus.Name == this.Name && bus.PassengerNum == this.PassengerNum)
{
return true;
} return false;
}——————————————————————————————————————————————不知道是我理解错误 还是没有搞懂这个重写是什么作用用了这个好像没什么效果
不知道从哪里体现出来。。查了下 好像是说 我添加到LIST里一个CAR4 (CAR4和CAR2)是同样的数据
然后删除CAR4的同时 CAR2 也删除了 不知道是不是这个概念 还是我的代码有错误请各位指教。。
但是好像没听懂 也不知道它的实现机制是什么
好像也不是很清楚到底该怎么用
如下是我的代码:
public static void Main(string[] args)
{
//生成泛型LIST
List<Car> list = new List<Car>();
Car car1 = new Bus("公公1","黑色",20);
Car car2 = new Bus("公公2", "黑色", 20);
Car car3 = new Bus("公公3", "黑色", 20);
//添加元素到LIST
list.Add(car1);
list.Add(car2);
list.Add(car3);
//添加相同项
Bus car4 = new Bus("公公2", "黑色", 20);
list.Add(car4);
//移除此项
list.Remove(car4);
//遍历输出RUN方法
foreach(Bus bus in list)
{
bus.Run();
}
Console.Read();
}————————————————————————————————————————————
这是我的重写EQUALS public override bool Equals(object obj)
{
Bus bus= obj as Bus;
if (bus == null) return false;
if (bus.Color == this.Color && bus.Name == this.Name && bus.PassengerNum == this.PassengerNum)
{
return true;
} return false;
}——————————————————————————————————————————————不知道是我理解错误 还是没有搞懂这个重写是什么作用用了这个好像没什么效果
不知道从哪里体现出来。。查了下 好像是说 我添加到LIST里一个CAR4 (CAR4和CAR2)是同样的数据
然后删除CAR4的同时 CAR2 也删除了 不知道是不是这个概念 还是我的代码有错误请各位指教。。
以你的代码来说,执行
//移除此项
list.Remove(car4);
後,删掉的不是Car4而是Car2, 因为你让car2跟car4相等了(在你的Equals方法内)TRY:
public Bus(string name,string color,int num)
{
this._color = color;
this._name = name;
this._num = num;
}
public string Color
{
get { return _color; }
set { _color = value; }
}
public string Name
{
get { return _name; }
set { _name = value; } }
public int PassengerNum
{
get { return _num; }
set { _num = value; }
}
public override bool Equals(object obj)
{
Bus bus = obj as Bus;
if (bus == null) return false;
if (bus.Color == this.Color && bus.Name == this.Name && bus.PassengerNum == this.PassengerNum && this.GetHashCode()==bus.GetHashCode() ) //加上HashCode的判等.
{
return true;
} return false;
}
public override string ToString()
{
return string.Format("Name={0},Color={1},Num={2}", _name, _color, _num);
}
public override int GetHashCode() //重写GetHashCode,你可以自己往里面加自己的hash函数
{
return base.GetHashCode();
}
}这样你list.Remove(car4)后,删掉就是car4而不是car2了。
怎么能往里面添加Bus类型的#24..纳闷
我想要的效果是 在删除CAR4的同时 也删除CAR2。。毕竟他们是相同的。 不知道EQUALS是否能做这个事