标签:
委托定义了方法的模板,我们可以使用下面的方式定义一个具体的委托:
1 public delegate bool Predicate(string str);
表示我们定义的方法模板为 参数为string类型,返回值为bool;任意参数类型为string返回值类型为bool的方法均可以作为该委托的一个对象存在;
1 public bool isOk(string str)
2 {
3 return false;
4 }
5 //使用
6 Predicate delegate1 = isOk;
但是这样的委托具有很大的局限性,只能表示一种特定的方法模板(即具有一个输入参数为string类型,输出为bool类型的方法);结合之前的委托我们可以创造更加灵活的委托,泛型委托
1 /// <summary>
2 /// 定义一个输入参数,返回值为bool类型的泛型委托
3 /// </summary>
4 /// <param name="t"></param>
5 /// <returns></returns>
6 public delegate bool Predicate<T>(T t);
7
8 //使用
9 Predicate<string> delegate1 = isOk;
还可以定义参数与返回值均为泛型的委托
1 /// <summary>
2 /// 参数与返回值均为泛型
3 /// </summary>
4 /// <param name="t"></param>
5 /// <returns></returns>
6 public delegate TResult Predicate<in T, out TResult>(T t);
7
8
9 //使用
10 Predicate<string> delegate1 = isOk;
11 Predicate<string,bool> delegate2 = isOk;
在LINQ中使用了大量上面定义的类型,名字叫做Func;
与之对应的是Action委托,区别在于Action委托是不包含返回值的;
使用var关键字标示饮食类型局部变量,由编译器去推断实际类型
使用var关键字时必须对变量进行初始化,否则编译器将会报错;var只能用于局部变量,不能用在字段,属性,方法的返回值;
使用var与使用object是不同的,比如var str = "dssdsd";str的实际类型仍然是string,可以在IDE中智能提示看到效果
标签:
原文地址:http://www.cnblogs.com/registed/p/4522752.html