• 泛型委托


      1 using System;
      2 
      3 namespace 泛型委托
      4 {
      5     class Program
      6     {
      7         private delegate bool DelCompare(object o1, object o2);
      8 
      9         private delegate bool Compare<T>(T t1, T t2);
     10         static void Main(string[] args)
     11         {
     12             string[] strings = { "C#", "FrameWork", ".net" };
     13             int[] ints = { 1, 2, 3, 4, 5 };
     14 
     15             // 1. 普通方法
     16             string maxString = GetMaxString(strings);
     17             int maxInt = GetMaxInt(ints);
     18             Console.WriteLine(maxString);
     19             Console.WriteLine(maxInt);
     20 
     21             // 2. 委托方法
     22             // 比较麻烦,需要装拆箱
     23             object[] strings2 = { "C#", "FrameWork", ".net" };
     24             object[] ints2 = { 1, 2, 3, 4, 5 };
     25             maxString = (string)GetMax(strings2, CompareString);
     26             maxInt = (int)GetMax(
     27                 ints2,
     28                 delegate (object o1, object o2)
     29                 {
     30                     // 拆箱
     31                     int i1 = (int)o1;
     32                     int i2 = (int)o2;
     33                     return i1 < i2;
     34                 });
     35             Console.WriteLine(maxString);
     36             Console.WriteLine(maxInt);
     37 
     38             // 3. 泛型委托
     39             // 语法简单,性能高
     40             maxString = GetMaxT<string>(strings, (s1, s2) => { return s1.Length < s2.Length; });
     41             maxInt = GetMaxT<int>(ints, (i1, i2) => i1 < i2);
     42             Console.WriteLine(maxString);
     43             Console.WriteLine(maxInt);
     44 
     45             Console.ReadKey();
     46         }
     47 
     48         #region 普通方法
     49 
     50         private static string GetMaxString(string[] strings)
     51         {
     52             string max = strings[0];
     53             foreach (var s in strings)
     54             {
     55                 if (max.Length < s.Length)
     56                 {
     57                     max = s;
     58                 }
     59             }
     60 
     61             return max;
     62         }
     63 
     64         private static int GetMaxInt(int[] ints)
     65         {
     66             int max = ints[0];
     67             foreach (var i in ints)
     68             {
     69                 if (max < i)
     70                 {
     71                     max = i;
     72                 }
     73             }
     74 
     75             return max;
     76         }
     77 
     78         #endregion
     79 
     80         #region 委托方法
     81 
     82         private static object GetMax(object[] objects, DelCompare del)
     83         {
     84             object max = objects[0];
     85             foreach (var o in objects)
     86             {
     87                 if (del(max, o))
     88                 {
     89                     max = o;
     90                 }
     91             }
     92 
     93             return max;
     94         }
     95 
     96         private static bool CompareString(object o1, object o2)
     97         {
     98             string s1 = o1.ToString();
     99             string s2 = o2.ToString();
    100             return s1.Length < s2.Length;
    101         }
    102 
    103         #endregion
    104 
    105         #region 泛型委托
    106 
    107         private static T GetMaxT<T>(T[] ts, Compare<T> compare)
    108         {
    109             T max = ts[0];
    110             foreach (T t in ts)
    111             {
    112                 if (compare(max, t))
    113                 {
    114                     max = t;
    115                 }
    116             }
    117 
    118             return max;
    119         }
    120 
    121         #endregion
    122     }
    123 }
  • 相关阅读:
    java基础16 捕获、抛出以、自定义异常和 finally 块(以及关键字:throw 、throws)
    java基础15 内部类(成员内部类、局部内部类)和匿名内部类
    java基础14 多态(及关键字:instanceof)
    java基础13 接口(及关键字:interface、implements)
    Java 线程控制
    Java 多线程创建和线程状态
    Java New IO
    Java IO流
    Java 集合和泛型
    Java 动态代理
  • 原文地址:https://www.cnblogs.com/David-Huang/p/5358708.html
Copyright © 2020-2023  润新知