我正在尝试在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'?
答案 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();
}
}