C#new 没有必要吗?
我最近一直在玩HttpWebRequest
,在他们总是做的教程中:
IAsyncResult result = request.BeginGetResponse( new AsyncCallback(UpdateItem),state);
但是new AsyncCallback
似乎并不是必需的。 如果UpdateItem
具有正确的签名,那么似乎没有问题。 那么人们为什么要包括它呢? 它有什么用吗?
大多数情况都是一样的(考虑到一些过载规则,尽管不是在这个简单的例子中)。 但在以前版本的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(); });
AsyncCallback只是C#中的委托,它被声明为
public delegate void AsyncCallback(IAsyncResult ar);
只要签名匹配,当您传递方法名称时,编译器通常会替换代码,它只是替代它的快捷方式。
您只需使用Reflector检查即可。 如果你有这个例子。
request.BeginGetResponse(TestMethod, null); static void (IAsyncResult r) { //do something }
编译后的代码实际上看起来像这样。
request.BeginGetResponse(new AsyncCallback(Test), null);
为了完整起见,这在C#1.2(使用.NET 1.1)和C#2.0(使用.NET 2.0)之间发生了变化。 因此,从2.0开始,您确实可以在大多数情况下省略new SomeDelegateType(...)
。 奇怪的是,工具没有改变,因此在IDE中如果键入someObj.SomeEvent +=
IDE将建议(通过选项 卡 选项 卡 )完整版本,包括委托类型。
上述就是C#学习教程:C#new 没有必要吗?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/987063.html