可能的重复问题:
在 C# 中什么时候使用委托?
委托的作用是什么?
我看到很多有关使用委托的问题。我仍然不清楚在哪里和为什么会使用委托而不是直接调用方法。
我听过这句话很多次:“然后可以将委托对象传递给代码,该代码可以调用被引用的方法,而无需在编译时知道将调用哪个方法。”
我不明白这个说法如何正确。
我编写了以下示例。假设您有3个具有相同参数的方法:
public int add(int x, int y)
{
int total;
return total = x + y;
}
public int multiply(int x, int y)
{
int total;
return total = x * y;
}
public int subtract(int x, int y)
{
int total;
return total = x - y;
}
现在我声明一个委托:
public delegate int Operations(int x, int y);
现在我可以更进一步,声明一个处理程序来使用这个委托(或者直接使用你的委托)
调用委托:
MyClass f = new MyClass();
Operations p = new Operations(f.multiply);
p.Invoke(5, 5);
或者使用处理程序进行调用
f.OperationsHandler = f.multiply;
//just displaying result to text as an example
textBoxDelegate.Text = f.OperationsHandler.Invoke(5, 5).ToString();
在这两种情况下,我看到我的“multiply”方法被指定。为什么人们使用“在运行时更改功能”这个短语或上面那个短语?如果每次声明委托时都需要一个方法来指向,为什么要使用委托?如果需要指向一个方法,为什么不直接调用该方法?在我看来,使用委托需要编写比直接使用函数更多的代码。
可以有人给我举个现实世界中的例子吗?我完全感到困惑。