总结:
- 重载类能够实现没有继承关系直接的类与类之间的转换,重载运算符能够实现类与类的运算符运算,能够自定义预算符实际的要求,同时也比较直观。
- 重写Icomparable<T>和Icompare<T> 前者实现与当前类中参数的比较器,后者则是实现非默认比较器,是实现外部类之间的比较(集合中会自动获取当前中所有的类进行自动比较和排序)。实现方式是List<>集合的sort方法,传入比较器则按照比较器的输出结果,不传入则按照Icomparable<T>的比较结果排序。
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PromoteDay04
{
class Program
{
static void Main(string[] args)
{
/*---------------------*/
/*
* 建议9、习惯重载运算符
* 重载运算符能够使代码看起来一目了然
*/
//Salary s1 = new Salary() {RMB = 100};
//Salary s2 = new Salary() {RMB = 200};
//Salary s = s1 + s2;
//Console.WriteLine(s.RMB.ToString());
//Console.ReadKey();
/*-------------------------*/
/*
* 建议10、创建对象时要考虑是否实现比较器
*/
//List<Salary> companySalary = new List<Salary>();
//companySalary.Add(new Salary() { Name = "Mike", BaseSalary = 3000, Bonus = 5000 });
//companySalary.Add(new Salary() { Name = "Rose", BaseSalary = 2000, Bonus = 3000 });
//companySalary.Add(new Salary() { Name = "jeffry", BaseSalary = 5000, Bonus = 8000 });
//companySalary.Add(new Salary() { Name = "Eric", BaseSalary = 6000 , Bonus = 10000 });
//companySalary.Sort(new BonusComparer());//为Sort方法提供比较器,Sort方法需要提供比较器,如果不提供比较器则会报错
// //排序会报错,有三个重载,1)第一个是arraylist里装的实例已经实现了比较器Icomparable则可以,对于非默认比较器则需要
// //在方法参数里放置实现Icompare接口比较器的方法。
//foreach (Salary item in companySalary)
//{
// Console.WriteLine(item.Name + "\t BaseSalary:" + item.BaseSalary.ToString()+ "\tBonus:" + item.Bonus.ToString());
//}
//Console.ReadKey();
/*-------------------------------------------------------*/
}
}
class Salary : IComparable<Salary>
{
public string Name { get; set; }
public int BaseSalary { get; set; }
public int Bonus { get; set; }
public int CompareTo(Salary obj)
{
if (obj.BaseSalary > this.BaseSalary)
{
return -1;
}
else if (obj.BaseSalary == this.BaseSalary)
{
return 0;
}
else
{
return 1;
}
}
}
class BonusComparer : IComparer<Salary>
{
public int Compare(Salary x, Salary y)
{
return x.Bonus.CompareTo(y.Bonus);
}
}
//class Salary
//{
// public int RMB { get; set; }
// public static Salary operator +(Salary s1 , Salary s2)
// {
// s2.RMB += s1.RMB;
// return s2;
// }
//}
}