C#new [delegate]没有必要吗?

mpe*_*pen 5 c# delegates

我最近一直在玩HttpWebRequests,在教程中他们总是这样做:

IAsyncResult result = request.BeginGetResponse(
  new AsyncCallback(UpdateItem),state);
Run Code Online (Sandbox Code Playgroud)

new AsyncCallback似乎并不是必要的.如果UpdateItem有正确的签名,那么似乎没有问题.那么人们为什么要包括它呢?它有什么用吗?

Joh*_*lla 12

大多数情况都是一样的(考虑到一些过载规则,尽管不是在这个简单的例子中).但在以前版本的C#中,没有任何委托类型推断.因此,教程要么(a)在代理类型推断可用之前编写,要么(b)他们想要解释为详细说明.

以下是您可以利用委托类型推断的一些不同方法的摘要:

// Old-school style.
Chef(new CookingInstructions(MakeThreeCourseMeal));

// Explicitly make an anonymous delegate.
Chef(delegate { MakeThreeCourseMeal });

// Implicitly make an anonymous delegate.
Chef(MakeThreeCourseMeal);

// Lambda.
Chef(() => MakeThreeCourseMeal());

// Lambda with explicit block.
Chef(() => { AssembleIngredients(); MakeThreeCourseMeal(); AnnounceDinnerServed(); });
Run Code Online (Sandbox Code Playgroud)