说说委托代理func

Func<T, TResult> Delegate3.5以上版本可用.

个人理解:不用再事先声明一个delegate的类型了.可以直接用,也可以用lamba调用 .参数1:委托类型,参数二:返回类型



Eg1;传统型的.

using System;

delegatestring ConvertMethod(string inString);

publicclassDelegateExample
{
publicstaticvoid Main()
{
//Instantiate delegate to reference UppercaseString method
ConvertMethod convertMeth =UppercaseString;
string name = "Dakota";
//Use delegate instance to call UppercaseString method
Console.WriteLine(convertMeth(name));
}

privatestaticstring UppercaseString(string inputString)
{
return inputString.ToUpper();
}
}


//个人理解:1.代理在用的时候要实例化,

2.被调用的方法必须是static的。

3.代理的定义不能在public,private

4.返回类型要相同(string),参数类型要相同。



Eg2: func


using System;

publicclassGenericFunc
{
publicstaticvoid Main()
{
//Instantiate delegate to reference UppercaseString method
Func<string, string> convertMethod =UppercaseString;
string name = "Dakota";
//Use delegate instance to call UppercaseString method
Console.WriteLine(convertMethod(name));
}

privatestaticstring UppercaseString(stringinputString)
{
return inputString.ToUpper();
}
}


//个人理解:相当于少了定义,其它和1相同。

2.fund必须有返回值,如果是没有返回值的,要用Action去替代。



Eg3:lamba

using System;

publicclassLambdaExpression
{
publicstaticvoid Main()
{
Func<string, string> convert = s=> s.ToUpper();

string name = "Dakota";
Console.WriteLine(convert(name));
}
}


//个人理解:相当于把方法的实现放在func中。



你可能感兴趣的:(代理,func,委托)