我经常被问到这个问题,我想我应该就如何最好地描述差异征求一些意见。 最佳答案 它们实际上是两种截然不同的东西。“委托(delegate)”实际上是保存对方法或lambda的引用的变量的名称,而lambda是没有永久名称的方法。除了一些细微的差别外,Lambda与其他方法非常相似。在"statement"中定义了一个普通方法并绑定(bind)到永久名称,而lambda在"expression"中“动态”定义并且没有永久名称。一些lambda可以与.NET表达式树一起使用,而方法则不能。委托(delegate)定义如下:delegate
是否可以在C#中定义这样的类classGenericCollection:SomeBaseCollectionwhereT:Delegate昨晚我无法在.NET3.5中完成这项工作。我尝试使用delegate,Delegate,ActionandFunc在我看来,这在某种程度上应该是允许的。我正在尝试实现我自己的EventQueue。我最终只是这样做了[请注意原始近似]。internaldelegatevoidDWork();classEventQueue{privateQueueeventq;}但后来我失去了为不同类型的函数重用相同定义的能力。想法? 最佳
我的类(class)需要一些委托(delegate)。我想使用界面来“提醒”我设置这些委托(delegate)。怎么做?我的类(class)是这样的:publicclassClsPictures:myInterface{//ImplementingtheIProcessinterfacepubliceventUpdateStatusEventHandlerUpdateStatusText;publicdelegatevoidUpdateStatusEventHandler(stringStatus);publiceventStartedEventHandlerStarted;publi
在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
谁能对这3个最重要的委托(delegate)提供一个很好的解释(希望有例子):谓词行动函数 最佳答案 Predicate:本质上是Func;询问“指定的参数是否满足委托(delegate)所委托(delegate)的条件?”用于List.FindAll之类的东西。Action:在给定参数的情况下执行操作。非常通用。在LINQ中使用不多,因为它基本上意味着副作用。Func:在LINQ中广泛使用,通常用于转换参数,例如通过将复杂结构转换到一个属性。其他重要委托(delegate):EventHandler/EventHandler:在整
委托(delegate)和事件之间有什么区别?两者不都持有对可以执行的函数的引用吗? 最佳答案 Event声明在delegate实例上添加了一个抽象层和保护层。这种保护可防止委托(delegate)的客户端重置委托(delegate)及其调用列表,并且只允许在调用列表中添加或删除目标。 关于c#-委托(delegate)和事件之间有什么区别?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/quest