您的位置:首页 > 编程语言 > C#

C#学习之----委托

2017-04-18 14:26 225 查看
委托
如果用到我们要把方法当做参数来传递的话,就需要用到委托。

 
简单来说,委托就是一个类型,这个类型可以赋值一个方法的引用

定义
定义一个委托,就是告诉编译器这个委托可以指向哪些类型的方法,然后创建该委托的实例
实例:

 class Program

    {

        private delegate string StringDele(int index);      

        static void Main(string[] args)

        {

            //实例一 实现委托的定义和调用

                //第一种方式 使用委托类型 创建实例

          

                // StringDele strIns = new StringDele(ToString);//strIns指向ToString方法

                //第二种方式  使用委托类型 创建实例  常使用的方式

               // StringDele strIns =ToString;//strIns指向ToString方法

                //第一种 引用方式  常使用的方式

               // string s = strIns(20);

                //第二种引用方式 Invoke调用

                //string s = strIns.Invoke(10);

            

               // Console.WriteLine(strIns(20));

            //实例二  实现委托可以作为一个方法的参数

                PrintString method;

                method = Methiod1;//设置委托指向Methiod1方法的引用

                PrintStr(method);

                method = Methiod2;//设置委托指向Methiod2方法的引用

                PrintStr(method);

            //Action委托--引用了一个无返回类型的方法

                //指定向一个没有返回值,有一个int参数的方法

                Action<int> a=ActionMehtod;//定义一个委托类型,这个类型可以指向一个没有返回值,有一个int参数的方法

                //指向无返回 无参数的方法

                Action act=ActionMethod;//这个是系统内置的一个委托类型,他可以指向无返回 无参数的方法

                a(12);

                act();

            //Func委托--他引用了一个带返回值的方法,他可以传递0--16个参数类型,和一个返回类型

                //无参数,有返回值

                Func<int> func = FuncMethod;

                Console.WriteLine(func());

                Func<string,int> funcd=FuncMethod2;//可以定义多个参数,最后一个必须为返回类型

                //可以定义多个参数

                Func<string,int, int> func3 = FuncMethod3;//前两个是输入参数,最后一个必须为返回类型

                int tt = funcd("123");

                Console.WriteLine(tt);

 

                int t3 = func3("456",12);

                Console.WriteLine(t3); 

            Console.Read();

           

        }

        public static string ToString(int index)

        {

            return index.ToString();

        }

        public delegate void PrintString();

        public static void PrintStr(PrintString str)

        {

            str();

        }

        static void Methiod1()

        {

            Console.WriteLine("mehtod 1");

        }

        static void Methiod2()

        {

            Console.WriteLine("mehtod 2");

        }

        static void ActionMethod()

        {

            Console.WriteLine("ActionMethod");

        }

        static void ActionMehtod(int dex)

        {

            Console.WriteLine("ActionMethod  dex");

        }

        static int FuncMethod()

        {

            return 1;

        }

        static int FuncMethod2(string str)

        {

            return int.Parse(str);

        }

        static int FuncMethod3(string str,int t)

        {

            return int.Parse(str);

        }

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: