草庐IT

Delegates

全部标签

c# - 即使签名匹配,也无法将一种类型的委托(delegate)分配给另一种

我病态的好奇心让我想知道为什么以下失败://declaredsomewherepublicdelegateintBinaryOperation(inta,intb);//...inamethodbodyFuncaddThem=(x,y)=>x+y;BinaryOperationb1=addThem;//doesn'tcompile,andcastingdoesn'tcompileBinaryOperationb2=(x,y)=>x+y;//compiles! 最佳答案 C#对“结构”类型的支持非常有限。特别是,您不能简单地从一种委托

c# - 委托(delegate)方法与一般方法

我想知道使用委托(delegate)方法和使用一般方法[无委托(delegate)]之间的区别。例如:与委托(delegate):delegatevoidDelMethod(stringstr);staticvoidMethod(stringstr){Debug.WriteLine(str);}用法:DelMethoddm=newDelMethod(Method);dm(string);并且没有委托(delegate):staticvoidMethod(stringstr){Debug.WriteLine(str);}用法:Method(string)这两个有什么区别??没有委托(de

c# - 复制委托(delegate)

我刚刚在events上阅读了一页在MSDN上,我发现了一段令我困惑的示例代码。有问题的代码是这样的://Makeatemporarycopyoftheeventtoavoidpossibilityof//araceconditionifthelastsubscriberunsubscribes//immediatelyafterthenullcheckandbeforetheeventisraised.EventHandlerhandler=RaiseCustomEvent;我理解代码的意图,但我看不出那条特定的行是如何复制任何东西的。它所做的只是复制引用;它实际上并没有制作委托(de

C# 事件处理(与 Java 相比)

我目前很难理解和使用委托(delegate)在C#中实现事件。我习惯了Java的做事方式:为监听器类型定义一个接口(interface),该接口(interface)将包含许多方法定义如果我对监听器中定义的所有事件不感兴趣,则为该接口(interface)定义适配器类可以使事情变得更容易在引发事件的类中定义Add、Remove和Get[]方法定义protectedfire方法来完成循环遍历添加的监听器列表并调用正确方法的脏活我理解(并且喜欢!)-我知道我可以在c#中完全相同地执行此操作,但似乎有一个新的(更好的?)系统适用于c#。在阅读了无数解释c#中委托(delegate)和事件使用

c# - 委托(delegate)可以有可选参数吗?

在我尝试添加boolNetworkAvailable=true部分之前,我的以下代码运行良好。现在我在下面的第4行得到了一个Methodnameexpected编译时异常。voidNetworkStatus_AvailabilityChanged(objectsender,NetworkStatusChangedArgse){varnetworkAvailable=e.IsAvailable;SetUpdateHUDConnectedModed=newSetUpdateHUDConnectedMode(UpdateHUDConnectedMode(networkAvailable));

c# - 可以在此通用代码中避免使用 Delegate.DynamicInvoke 吗?

这个问题部分是关于委托(delegate)的,部分是关于泛型的。给定简化代码:internalsealedclassTypeDispatchProcessor{privatereadonlyDictionary_actionByType=newDictionary();publicvoidRegisterProcedure(Actionaction){_actionByType[typeof(T)]=action;}publicvoidProcessItem(objectitem){Delegateaction;if(_actionByType.TryGetValue(item.Get

c# - lambda 函数是否比委托(delegate)/匿名函数更快?

我假设lambda函数、delegates和anonymousfunctions具有相同的主体将具有相同的“速度”,但是,运行以下简单程序:staticvoidMain(string[]args){Listitems=newList();Randomrandom=newRandom();for(inti=0;iresult;Func@delegate=delegate(inti){returnilambda=i=>ii我得到:Delegate:4.2948msLambda:0.0019msAnonymous:0.0034ms虽然可以忽略不计,但为什么这三种-显然相同-方法以不同的速度运

c# - Observable.FromEvent 和 CreateDelegate 参数映射

我在看的实现Observable.FromEvent(add,remove)我正在努力了解它是如何工作的。让我们说TEventHandler是标准:publicdelegatevoidEventHandler(objectsender,EventArgse);那么让我费解的代码是:TEventHandlerd=(TEventHandler)Delegate.CreateDelegate(typeof(TEventHandler),(object)newAction(observer.OnNext),typeof(Action).GetMethod("Invoke"));(n.b我已将此

c# - 使用反射创建通用委托(delegate)

我有以下代码:classProgram{staticvoidMain(string[]args){newProgram().Run();}publicvoidRun(){//worksFunc>static_delegate=newFunc>(SomeMethod);MethodInfomi=this.GetType().GetMethod("SomeMethod").MakeGenericMethod(newType[]{typeof(String)});//throwsArgumentException:ErrorbindingtotargetmethodFunc>reflecti

c# - 使用 Func<>(或 Action<>)或创建自己的委托(delegate)?

哪个更好,比如说,方法中的参数类型(与LINQ无关)。显然Func更好,因为它更简单,更具描述性,如果每个人都在使用它,一切都会变得兼容(好)。但是我注意到Microsoft在某些库中使用了自己的委托(delegate),例如事件处理程序。那么,它们各自的优点和缺点是什么?我应该什么时候使用它?编辑:显然Func仅在3.5中可用,因此这可能是我看到非Func委托(delegate)的主要原因。还有其他不使用Func的原因吗?(例如:this来自.NET4)同样的问题也适用于Action 最佳答案 Func在非常清楚它们的用途并且输入