泛型委托

  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 }

 

posted @ 2016-04-06 12:07  David Huang  阅读(829)  评论(0编辑  收藏  举报