泛型委托深入
1) 隐式类型Var的使用
static void Main(string[] args)
{
//隐式类型
var person = new {name ="小明",age="12"}; //不需要定义类的名称
Console.WriteLine(person.name);
//如果使用object,访问不了匿名类的属性name和age,如果想访问的到,可以使用反射!
Console.ReadKey();
}
2)匿名函数和lambda表达式的使用
internal delegate int DemoAdd(int a, int b);
class Program
{
static void Main(string[] args)
{
//匿名函数的关键字就是delegate开头的,(类似于javascript的function),后面紧接着函数的参数,后面是函数体
DemoAdd demoAdd = delegate(int a, int b) { return a + b; };
//以上用Lambda表示式,=>表示成goto
DemoAdd lamdaDemoAdd = ( a, b) => { return a + b; };
DemoAdd lamdaDemoAdd1 = ( a, b) => a + b;
Console.ReadKey();
}
}
3)泛型委托
internal delegate int DemoAdd(int a, int b);
//定义泛型返回值
delegate T DemoAdd<T>(int a ,int b);
//参数也定义泛型
delegate T DemoAdd1<T,T1,T2>(T1 a, T2 b);
class Program
{
static void Main(string[] args)
{
//泛型返回值
DemoAdd<string> demoAdd = (a, b) => (a + b).ToString();
//参数类型为String,返回类型是字符串
DemoAdd1<string,string,string > demoAdd1 = (a, b) => (a + b).ToString();
//参数类型为int,返回类型也是整型
DemoAdd1<int, int, int> demoAdd2 = (a, b) => a + b;
}
}
4)Func<T, TResult> 委托 ,可以使用此委托表示一种能以参数形式传递的方法,而不用显式声明自定义委托。 封装的方法必须与此委托定义的方法签名相对应。 也就是说,封装的方法必须具有一个通过值传递给它的参数,并且必须返回值。
//Func与Action的区别:Action是没有返回值,Func有返回值 internal delegate TResult Func<in T, out TResult>( T args ); class Program { static void Main(string[] args) { //所用的方法是实例化 Func<T, TResult> 委托,而不是显式定义一个新委托并将命名方法分配给该委托。 //传入参数是字符串,返回值也是字符串 Func<string, string> convertMethod = UppercaseString; string name = "Dakota"; Console.WriteLine(convertMethod(name)); } private static string UppercaseString(string inputString) { return inputString.ToUpper(); } }

浙公网安备 33010602011771号