C#委托三——泛型委托

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这种方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值