c# 委托 delegate

本人在学习C#,遇到了delegate,故上网搜寻相关文档,现在已经理解了它的用途了。整理如下:

用途:

        简单的来说,委托就是用来执行那些和定义的委托有同样类型参数和返回值的方法。

例子:

        比如定义委托:public delegate void MyDeleteGate();

那么只要是返回值是void, 没有输入参数的方法(不管这个方法是定义在哪里,不管是静态的还是实例的)都可以由这个交由这个委托来执行。

又比如定义下面这个委托:public delegate string MySecondDeleteGate(string parameter1, double parameter2);

那么只要是返回值是string, 第一个参数是string, 第二个是double的方法(不管这个方法是定义在哪里,不管是静态的还是实例的)都可以由这个交由这个委托来执行。

下面是简单的例子:

namespace Utils
{

    //定义一个委托,委托的名字是 MyDeleteGate
    public delegate void MyDeleteGate();

    //定义一个委托,委托的名字是 MySecondDeleteGate
    public delegate string MySecondDeleteGate(string parameter1, double parameter2);
}

 实现一下方法,为了交由委托来执行:

namespace Utils
{
    public class DelegateMethods
    {
        public void initial()
        {
            Console.WriteLine("Initial method!");
        }

        public static void StaticMethod()
        {
            Console.WriteLine("It is StaticMethod method!");
        }

        public string Check(string parameter, double value)
        {
            //do some thing accordin these input parmeters
            Console.WriteLine("Check method!");
            return "This is check method";
        }

        public static string StaticCheck(string parameter, double value)
        {
            //do some thing accordin these input parmeters
            Console.WriteLine("StaticCheck method!");
            return "This is a static check method";
        }
    }
}

下面代码演示如何使用:

namespace Utils
{
    public class Test
    {
        static void Main(string[] args)
        {
            DelegateMethods delegateMethods = new DelegateMethods();
            MyDeleteGate myDeleteGate = new MyDeleteGate(delegateMethods.initial);//委托实例方法
            myDeleteGate += DelegateMethods.StaticMethod;//委托静态方法
            myDeleteGate += finish;//委托调用一个定义在其它对象上的方法

            myDeleteGate();//执行委托

            MySecondDeleteGate mySecondDeleteGate = new MySecondDeleteGate(delegateMethods.Check);//委托实例方法
            mySecondDeleteGate += DelegateMethods.StaticCheck;//委托静态方法
            mySecondDeleteGate += FinishCheck;//委托调用一个定义在其它对象上的方法

            string value = mySecondDeleteGate("Test", 12.3);//执行委托
        }

        private static void finish()
        {
            Console.WriteLine("finish method");
        }

        private static string FinishCheck(string par, double va)
        {
            Console.WriteLine("finish method");
            return "ok";
        }
    }
}

上面这个就是委托的简单使用流程。

你可能感兴趣的:(c#)