什么是代表?

Nav*_*eed 148 oop delegates

我很困惑,代表的实际角色是什么?

在我的采访中我多次被问到这个问题,但我不认为面试官对我的答案感到满意.

谁能用一个实际的例子用一句话告诉我最好的定义?

dcp*_*dcp 164

我喜欢将委托视为"指向函数的指针".这可以追溯到C天,但这个想法仍然存在.

这个想法是你需要能够调用一段代码,但是你要调用的那段代码直到运行时才知道.所以你为此目的使用"委托".代表们可以为事件处理程序之类的东西派上用场,例如,根据不同的事件,您可以根据不同的事件执行不同的操作.

以下是您可以查看的C#参考:

例如,在C#中,假设我们有一个我们想要进行的计算,并且我们想要使用一种在运行时之前我们不知道的不同计算方法.所以我们可能有几个这样的计算方法:

public static double CalcTotalMethod1(double amt)
{
    return amt * .014;
}

public static double CalcTotalMethod2(double amt)
{
    return amt * .056 + 42.43;
}
Run Code Online (Sandbox Code Playgroud)

我们可以像这样声明一个委托签名:

public delegate double calcTotalDelegate(double amt);
Run Code Online (Sandbox Code Playgroud)

然后我们可以声明一个方法,将委托作为参数,如下所示:

public static double CalcMyTotal(double amt, calcTotalDelegate calcTotal)
{
    return calcTotal(amt);
}
Run Code Online (Sandbox Code Playgroud)

我们可以调用CalcMyTotal传递我们想要使用的委托方法的方法.

double tot1 = CalcMyTotal(100.34, CalcTotalMethod1);
double tot2 = CalcMyTotal(100.34, CalcTotalMethod2);
Console.WriteLine(tot1);
Console.WriteLine(tot2);
Run Code Online (Sandbox Code Playgroud)

  • +1表示对C中简单但有效的函数指针的点头. (18认同)
  • 一个问题与你的答案有关.与正常方式调用函数有什么不同?仅仅因为它在运行时不知道? (3认同)

Mla*_*dic 18

委托只是一个函数指针.
只需让您分配您希望运行代理的方法即可.然后在代码中,您可以通过Invoke调用该方法.

一些代码来演示(从内存写这个语法可能会关闭)

delegate void delMyDelegate(object o);

private void MethodToExecute1(object o)
{
    // do something with object
}

private void MethodToExecute2(object o)
{
    // do something else with object
}

private void DoSomethingToList(delMyDelegate methodToRun)
{
    foreach(object o in myList)
        methodToRun.Invoke(o);
}

public void ApplyMethodsToList()
{
    DoSomethingToList(MethodToExecute1);
    DoSomethingToList(MethodToExecute2);
}
Run Code Online (Sandbox Code Playgroud)


Ant*_*ney 15

取自这里

什么是代表?
A当对象收到请求时,该对象可以自己处理请求,也可以将请求传递给第二个对象来完成工作.如果对象决定打开请求,则表示该对象已将处理请求的责任转发给第二个对象.

或者,作为一个简单的伪示例:某些东西向object1发送请求.然后object1将请求及其自身转发给object2 - 委托.object2处理请求并完成一些工作.(注意:上面的链接给出了很好的例子)