C#学*笔记:使用委托将方法作为参数传递

发布于:2021-10-25 22:26:26

委托可以让方法作为参数传递给其他方法。可以用一个例子阐述这一问题。


    首先定义一个委托类型,代码如下:

    public delegate void MyDelegate();

    然后在项目生成的Progran类中定义两个方法M1和M2

    static void M1()
    {
    Console.WriteLine("方法一");
    }

    static void M2()
    {
    Console.WriteLine("方法二");
    }

    然后再定义一个Test方法,方法中调用委托,随后又将参数d与M2方法关联。

    static void Test(MyDelegate d)
    {
    //调用委托
    if (d != null)
    {
    d();
    }
    //改为与M2方法关联
    d = M2;
    }

    现在来进行测试调用,声明委托变量de并与M1方法关联,然后调用Test方法,在调用完Test方法后在调用一次委托变量de。最终得出如图所示结果。

    MyDelegate de = M1;
    Test(de);
    de();
    Console.ReadKey();


    总结:利用Test方法中代码修改了参数d,与M2方法进行了关联,但是,当方法执行完成后,在方法外再次调用de,输出的仍然是"方法1"。因此,本示例不仅演示了如果通过委托实现将方法作为参数传递,同时也说明了委托类型在传递时是进行自我复制的 。参数d在方法内部被修改,并不影响方法外部的de变量。虽然委托是引用类型,但是方法内部让委托变量与M2方法进行了关联,就等于参数d引用了新的委托实例。而外部的委托变量传递给参数d时只是把委托的地址进行了自我复制,所以方法调用完成后,外部的变量引用的仍然是原来的委托实例。

相关推荐

最新更新

猜你喜欢