泛型委托深入

 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();
        }
    }

 

 

 

 

posted @ 2014-02-22 20:40  chaotic  阅读(134)  评论(0编辑  收藏  举报