C#学习之----委托

来源:互联网 发布:太极线指标软件 编辑:程序博客网 时间:2024/05/21 10:16
委托
如果用到我们要把方法当做参数来传递的话,就需要用到委托。
 
简单来说,委托就是一个类型,这个类型可以赋值一个方法的引用

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

实例:

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

0 0
原创粉丝点击