泛型委托泛型接口实现自定义比较器

一:这里对泛型委托和泛型接口的理解有点生硬,我们直接根据代码分析:

首先定义一个泛型集合,首先要有一个类

 public class Person     {

        private string name;      

   public string Name         {   

          get { return name; }      

         set { name = value; }   

      }

        private int age;      

   public int Age  

       {        get { return age; }        

         set { age = value; }  

       }

}

测试类:使用泛型委托

 static void Main(string[] args)
        {
            List<Person> list=new List<Person>()
                                  {
                                      new Person(){Name = "张丽爱",Age = 200},
                                      new Person(){Name = "李小龙",Age = 30},
                                      new Person(){Name = "龙小李",Age = 40}
                                  };
            foreach (Person person in list)
            {
                Console.WriteLine(person.Age);
            }
          
            Console.WriteLine("排序后");
           list.Sort(Comparison);

     foreach (Person person in list)
            {
                Console.WriteLine(person.Age);
            }
            Console.ReadKey();
        }

  static int Comparison(Person x, Person y)/ // 泛型委托Comparison<Person>的实现方法;这里的Comparison是方法名,可以用别的方法名
        {
            int result = 0;
            if (x.Age>y.Age)
            {
                result = 1;
            }
            if (x.Age<y.Age)
            {
                result = -1;
            }
            if (x.Age==y.Age)
            {
                result = 0;
            }
            return result;
        }
    }

测试类:IComparer<Person> (泛型接口的实现类)重写IComparer<Person> 中的Compare 方法  

class Program
    {
        static void Main(string[] args)
        {
            List<Person> li = new List<Person>{
                                    new Person(){Name="打啊",Age=35},
                                    new Person(){Name="戴爱",Age=20}
            };
            foreach (Person item in li)
            {
                Console.WriteLine(item.Age);
            }
           //li.Sort(Comparison);
            li.Sort(new  Mycompare());
         
            Console.WriteLine("排列后:");
            foreach (Person item in li)
            {
                Console.WriteLine(item.Age);
            }
            li.Sort(new Mycompare());

  foreach (Person item in li)
            {
                Console.WriteLine(item.Age);
            }
          
        }

   public class Mycompare :IComparer<Person>    

{

        public int Compare(Person x, Person y)   

      {            

  int result = 0;          

     if (x.Age > y.Age)      

       {            

     result = 1;       

      }    

        if (x.Age == y.Age)     

        {                 result = 0;             }       

      if (x.Age < y.Age)        

     {                 result = -1;             }          

   return result;         }  

   }

 }

有以上代码,我们不难看出li.sort()的方法中分别是用实现IComparer<Person>泛型接口的实现类的Compare(Person x, Person y)【注意:x,y是要保持数据类型一致,一般情况是intde 】方法,或者是泛型委托Comparison<Person>的实现方法。

 

 

二:扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。

扩展类特点:1.类是静态的,2.方法是静态的,3.要有this关键字(this只是编译时的一个标示,运行时并不认识)

现在我们定义一个扩展类:

public static class StringExtend
    {
       //01.类是静态类
       //02.方法是静态方法
       //03.this关键字
       public static string Rweilengdeyuhaoren(this string str)//没有实际意义,只是为了编译需要
       {
           return str + "今天的天气真好!";
       }
    }

测试类:

class Program
    {
        static void Main(string[] args)
        {
            string str = "我是好人";
            string result = str.Rweilengdeyuhaoren();
           
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }

扩展方法的本质:编译后,调用的静态方法。

这是学到的泛型委托泛型接口实现自定义比较器和扩展方法,只是我的一点点看法,希望有更好的解答可以分享

 

 

 

转载于:https://www.cnblogs.com/Bend215165709/p/3639521.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值