码迷,mamicode.com
首页 > Windows程序 > 详细

C#委托三——泛型委托

时间:2015-04-10 13:35:37      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:action   func   泛型委托   

PanPen120在CSDN上原创,如其他网站转载请注意排版和写明出处:
研究委托,因为有函数指针的基础,还容易上手,但是对于一些概念和实践,总是为了弄的非常清楚而纠结,这几篇关于委托的文章我是结合《C#与.NET4高级程序设计》、MSDN、借鉴其他人的博文来总结话语,以最直接简洁的话来阐述清楚

关键字:

Func Action delegate三种
一般说的泛型就是Func和Action,是委托的简写
我将delegate这个正版的委托也加入是因为他也可以写成泛型

描述:

固定委托的参数个数,但参数的类型是动态可变

目的\优势:

省去了定义委托类型的步骤

Action与Fun区别:

Action无返回值,Action重载的参数个数有1-4个
Func有返回值。Func重载的参数个数有1-4个

Action示例:

namespace testAction
{
    class Program
    {
       // public delegate void Action<T>(T arg);
      //注释的这一行是Action的原型,这句可写可不写,即上面提到的目的...
      //注释的这一行是Action的原型,由此可看出Action无返回值
      static void Main(string[] args)
        {
            Action<int> action = PrintfMyAge;
            action(4);
            Action<string> action2 = PrintfMyName;
            action2("PanPen120");
            Console.ReadLine();
        }
        static void PrintfMyAge(int myAge)
        { Console.WriteLine("My Age is {0}",myAge); }
        static void PrintfMyName(string myName)
        { Console.WriteLine("My Name is {0}",myName); }
    }
}

Func示例:

//区别是委托注册的函数都是有返回值的
namespace testAction
{
    class Program
    {
        static void Main(string[] args)
        {
            Func<int,int> action = PrintfMyAge;
            action(4);
            Func<string, int> action2 = PrintfMyName;
            action2("PanPen120");
            Console.ReadLine();
        }
        static int PrintfMyAge(int myAge)
        { Console.WriteLine("My Age is {0}", myAge); return 1; }
        static int PrintfMyName(string myName)
        { Console.WriteLine("My Name is {0}", myName); return 1; }
    }
}

delegate示例:

namespace GenericDelegate
{
    public delegate void MyGenericDelegate<T>(T arg);

    class Program
    {
        static void Main(string[] args)
        {
            MyGenericDelegate<string> strTarget = new MyGenericDelegate<string>(StringTarget);
            StringTarget("Some string data");

            MyGenericDelegate<int> intTarget = new MyGenericDelegate<int>(IntTarget);
            intTarget(9);

            Console.ReadLine();
        }

        static void StringTarget(string arg)
        {
            Console.WriteLine("arg in uppercase is : {0}", arg.ToUpper());
        }
        static void IntTarget(int arg)
        {
            Console.WriteLine("++arg is : {0}", ++arg);
        }
    }
}

备注:

如果用到泛型委托,就用Action或者Func,没必要有简单的不用还要用delegate这种方式

C#委托三——泛型委托

标签:action   func   泛型委托   

原文地址:http://blog.csdn.net/panpen120/article/details/44978291

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!