解释委托输出结果

时间:2013-12-21 03:41:33

标签: c# delegates

我正在尝试在C#中使用委托号码转换器。但是,产生的结果我不明白它们是如何工作的。可以请向我解释一下吗?

我的代码将是......

delegate int NumberChanger(int n );
class Program
{
    static int num = 10;
    public static int AddNum(int p)
    {
        num += p;
        return num;
    }
    public static int MultiNum(int q)
    {
        num *= q;
        return num;
    }

    public static int getNum()
    {
        return num;
    }

    static void Main(string[] args)
    {
        //Create delegate instances
        NumberChanger nc1 = new NumberChanger(AddNum);
        NumberChanger nc2 = new NumberChanger(MultiNum);

        //calling the methods using the delegate objects
        nc1(1);
        Console.WriteLine("Value of Num: {0}", getNum());
        nc1(2);
        Console.WriteLine("Value of Num: {0}", getNum());
        Console.ReadKey();

    }
}

输出

  Value of Num: 11
  Value of Num: 13

为什么第二个输出结果会产生'13'?

1 个答案:

答案 0 :(得分:4)

问题:虽然为Addition创建了两个不同的函数Multiplication另一个函数,但是忽略{{1},您将调用Addition函数AddNum两次功能。

你的MultiNum得到了第二个输出:program这是预期的结果。

解决方案:如果您想调用乘法函数

替换它:

13

有了这个:

nc1(2);

完整代码:

nc2(2);

输出

delegate int NumberChanger(int n);
class Program
{
    static int num = 10;
    public static int AddNum(int p)
    {
        num += p;
        return num;
    }
    public static int MultiNum(int q)
    {
        num *= q;
        return num;
    }

    public static int getNum()
    {
        return num;
    }

    static void Main(string[] args)
    {
        //Create delegate instances
        NumberChanger nc1 = new NumberChanger(AddNum);
        NumberChanger nc2 = new NumberChanger(MultiNum);

        //calling the methods using the delegate objects
        nc1(1);
        Console.WriteLine("Value of Num: {0}", getNum());
        nc2(2);
        Console.WriteLine("Value of Num: {0}", getNum());
        Console.ReadKey();

    }
}