c#泛型入门

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace CsharpDataStructure
 7 {
 8     class Program
 9     {
10         //声明:本程序只说明几种常见委托和代理的使用,名称的定义不是很规范
11         public delegate void MyAction<T>(T obj);//自己定义的委托,无返回值,只有一个泛型参数
12         static void Main(string[] args)
13         {
14             var method=new MyAction<int>(PrintInt);
15             var selectBig = new Func<List<int>,int,int>(SelectBig);//创建一个Func代理,参数有两个,一个是list,一个是int;返回值是int
16             var boolMethod = new Predicate<int>(a => { return a > 3; });//创建一个Predicate类型的代理,只有一个参数int型,返回值默认bool型,
17             var bigMethod = new Action<int,int>(ShowBig);//创建一个Action型的代理,有两个int类型参数,默认无返回值
18             method(3);
19             int i = 6;
20             if (boolMethod(i))
21             {
22                 Console.WriteLine(i);
23             }
24             bigMethod(6,7);
25             List<int> mm = new List<int>() { 4, 6, 9, 8 };
26             Console.WriteLine(selectBig(mm, 3));
27             int[] number = new int[6] { 1, 2, 3, 4, 5 ,8};
28             IEnumerable<int> result = Filter<int>(number, (int item) => { return item > 3; });//可枚举类型的拓展,方法是lambda表达式
29             foreach (var item in result)
30             {
31                 Console.WriteLine(item);
32             }
33             Console.ReadLine();
34         }
35         static void PrintInt(int i)
36         {
37             Console.WriteLine(i);
38         }
39         static void ShowBig(int m,int n)
40         {
41             if(m>=n)
42                 Console.WriteLine(m);
43             else
44                 Console.WriteLine(n);
45         }
46         static int SelectBig(List<int> a,int b)
47         {
48             return a.Max()-b;
49         }
50         public static IEnumerable<T> Filter<T>(IEnumerable<T> ObjectList, Predicate<T>FilterFunc)//可枚举类型拓展:返回类型是可枚举的,参数一个是可枚举类型,一个是代理方法
51         {
52             List<T> ResultList = new List<T>();
53             foreach (var item in ObjectList)
54             {
55                 if (FilterFunc(item))
56                 {
57                     ResultList.Add(item);
58                 }
59             }
60             return ResultList;
61         }
62     }
63 }

  .NET类库在System名称空间,下定义了三种比较常用的泛型委托

Predicate<T>委托:

public delegate bool Predicate<T>(T obj);

这个委托描述的方法为接收一个T类型的参数,返回一个BOOL类型的值,一般用于比较方法

Action<T>委托

public delegate void Action<T>(T obj);
public delegate void Action<T1, T2>(T1 arg1, T2 arg2);

这个委托描述的方法,接收一个或多个T类型的参数(最多16个,我这里只写了两种类型的定义方式),没有返回值

Func<T>委托

public delegate TResult Func<TResult>();
public delegate TResult Func<T, TResult>(T arg);

这个委托描述的方法,接收零个或多个T类型的参数(最多16个,我这里只写了两种类型的定义方式),
与Action委托不同的是,它有一个返回值,返回值的类型为TResult类型的。

posted @ 2013-05-03 19:13  楠楠IT  阅读(304)  评论(0)    收藏  举报