当前位置: 代码迷 >> C# >> C#嘱托三——泛型委托
  详细解决方案

C#嘱托三——泛型委托

热度:80   发布时间:2016-05-05 04:19:44.0
C#委托三——泛型委托

PanPen120在CSDN上原创,如其他网站转载请注意排版和写明出处:

今天一直在研究委托,因为有函数指针的基础,还容易上手,但是对于一些概念和实践,总是为了弄的非常清楚而纠结,这几篇关于委托的文章我是结合《C#与.NET4高级程序设计》、MSDN、借鉴其他人的博文来总结话语,以最直接简洁的话来阐述清楚(在我弄懂之前网上的感觉都很模糊)

namespace GenericDelegate{    //泛型委托(泛到参数这里,可以接受一个任何类型的参数、返回值是void的方法,在委托对象创建的时候在具体什么类型参数)(参数数量和返回值固定的!)    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");            strTarget("ss");            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);        }    }}

泛型没有之前人们为了实现这个功能:

参数传入的是object

C#的程序员应该知道object类型是任何类型的基类

但是你第一次传入的是string,第二次传入的是int

带来的问题:

1.强制类型转换之前动态检查实际类型

2.参数传入前值被装箱,接收到拆箱,装箱拆箱会造成损失


  相关解决方案