C#编写高质量代码第四天

总结:

  1. 重载类能够实现没有继承关系直接的类与类之间的转换,重载运算符能够实现类与类的运算符运算,能够自定义预算符实际的要求,同时也比较直观。
  2. 重写Icomparable和Icompare 前者实现与当前类中参数的比较器,后者则是实现非默认比较器,是实现外部类之间的比较(集合中会自动获取当前中所有的类进行自动比较和排序)。实现方式是List<>集合的sort方法,传入比较器则按照比较器的输出结果,不传入则按照Icomparable的比较结果排序。

     

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 companySalary = new List();
            //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
    {
        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
    {
        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;
    //    }
    //}

}
 

你可能感兴趣的:(C#编程基础)