在C#语言和.NET框架中,你能帮助我理解委托(delegate)吗?我试图检查一些代码,发现我收到的结果出乎我的意料。在这里:classProgram{publicstaticintI=0;staticFuncdel=newFunc(I.ToString);staticvoidMain(string[]args){I=10;Console.WriteLine("{0}",del());}}答案是0,而不是10。为什么? 最佳答案 原因如下:声明委托(delegate)的方式直接指向静态int实例的ToString方法。它是在创建时
我看到过几次提到这个习语(包括onSO)://DeliberatelyemptysubscriberpubliceventEventHandlerAskQuestion=delegate{};好处很明显-它避免了在引发事件之前检查是否为null的需要。但是,我很想知道是否有任何缺点。例如,它是否被广泛使用并且足够透明以至于不会引起维护问题?空事件订阅者调用是否对性能有明显影响? 最佳答案 为什么不引入性能开销,而不是useanextensionmethod缓解这两个问题:publicstaticvoidRaise(thisEvent
任何人都可以解释写在这个link上的声明吗?Invoke(Delegate):在拥有控件的底层窗口句柄的线程上执行指定的委托(delegate)。任何人都可以解释这是什么意思(尤其是粗体)我无法清楚地理解 最佳答案 这个问题的答案在于C#控件的工作原理ControlsinWindowsFormsareboundtoaspecificthreadandarenotthreadsafe.Therefore,ifyouarecallingacontrol'smethodfromadifferentthread,youmustuseoneo
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。您在C#中如何使用委托(delegate)?
一些背景信息。我正在学习WebAPI堆栈,我正在尝试以“Result”对象的形式封装所有数据,其中包含Success和等参数错误代码。然而,不同的方法会产生不同的结果和错误代码,但结果对象通常会以相同的方式实例化。为了节省一些时间并了解更多关于C#中的async/await功能,我试图将我的WebAPI操作的所有方法主体包装在一个异步操作委托(delegate)但遇到了一些障碍...给定以下类:publicclassResult{publicboolSuccess{get;set;}publicListErrorCodes{get;set;}}publicasyncTaskGetRes
当使用myDelegate-=eventHandlerReSharper(版本6)问题时:Delegatesubtractionhasunpredictableresult这背后的理性是explainedbyJetBrainshere.这个解释很有道理,在阅读之后,我怀疑我对委托(delegate)的所有使用-。那么,我可以编写一个非自动事件而不让ReSharper脾气暴躁吗?或者,是否有更好和/或“正确”的方法来实现它?或者,我可以忽略ReSharper吗?这里是简化的代码:publicdelegatevoidMyHandler(objectsender);MyHandler_myE
谁能对这3个最重要的委托(delegate)提供一个很好的解释(希望有例子):谓词行动函数 最佳答案 Predicate:本质上是Func;询问“指定的参数是否满足委托(delegate)所委托(delegate)的条件?”用于List.FindAll之类的东西。Action:在给定参数的情况下执行操作。非常通用。在LINQ中使用不多,因为它基本上意味着副作用。Func:在LINQ中广泛使用,通常用于转换参数,例如通过将复杂结构转换到一个属性。其他重要委托(delegate):EventHandler/EventHandler:在整
我最近开始深入研究C#,但我无法弄清楚在使用该语言实现观察者/可观察模式时委托(delegate)是如何工作的。有人可以给我一个super简单的例子来说明它是如何完成的吗?我用谷歌搜索了这个,但我发现的所有示例要么过于针对特定问题,要么过于“臃肿”。 最佳答案 观察者模式通常用events来实现.这是一个例子:usingSystem;classObservable{publiceventEventHandlerSomethingHappened;publicvoidDoSomething()=>SomethingHappened?.
编译后,有没有区别:delegate{x=0;}和()=>{x=0}? 最佳答案 简短的回答:没有。可能不相关的较长答案:如果您将lambda分配给委托(delegate)类型(例如Func或Action),您将获得匿名委托(delegate)。如果您将lambda分配给一个表达式类型,您将得到一个表达式树而不是匿名委托(delegate)。然后可以将表达式树编译为匿名委托(delegate)。编辑:以下是表达式的一些链接。System.Linq.Expression.Expression(TDelegate)(从这里开始)。Lin
委托(delegate)和事件之间有什么区别?两者不都持有对可以执行的函数的引用吗? 最佳答案 Event声明在delegate实例上添加了一个抽象层和保护层。这种保护可防止委托(delegate)的客户端重置委托(delegate)及其调用列表,并且只允许在调用列表中添加或删除目标。 关于c#-委托(delegate)和事件之间有什么区别?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/quest