草庐IT

Delegates

全部标签

c# - 应该在引发事件的类内部还是外部声明委托(delegate)?

我见过各种事件处理的例子。这是一个:EventSample.有时我看到委托(delegate)在将引发事件的类外部声明(如上面的链接所示),有时在内部(我认为它应该被声明)。对我来说,在将引发事件的类中声明事件更有意义。原因是该类将声明的事件实际上只是辅助方法等的一些糖衣,它们实际上是在对委托(delegate)进行添加、减去和调用等操作。有什么最佳实践吗?是否有时您想在外部声明委托(delegate),而有时又想在内部声明委托(delegate)?如果是这样,应该如何决定要做什么? 最佳答案 通常,现在您会创建自己的派生自Even

c# - 有和没有 "new"的接线事件之间的区别

在C#中,这两行代码之间有什么区别(如果有的话)?tmrMain.Elapsed+=newElapsedEventHandler(tmrMain_Tick);和tmrMain.Elapsed+=tmrMain_Tick;两者看起来完全一样。当您键入后者时,C#是否只是假定您指的是前者? 最佳答案 这是我做的staticvoidHook1(){someEvent+=newEventHandler(Program_someEvent);}staticvoidHook2(){someEvent+=Program_someEvent;}然后

c# - 无法分配给委托(delegate)具有不太具体的参数类型的匿名方法

我能够分配一个方法M来委托(delegate)对象d具有不太具体的参数类型,但是当我想分配一个具有相同签名的匿名方法时作为M到d的方法,我得到一个错误。这是为什么?classderivedEventArgs:EventArgs{}delegatevoidnewDelegate(objecto,derivedEventArgse);staticvoidMain(string[]args){newDelegated=M;//okd=(objecto,EventArgse)=>{};//error}publicstaticvoidM(objecto,EventArgse){}

c# - Lambda\Anonymous 函数作为参数

我是C#的新手。只是玩弄它。并非出于真正目的。voidmakeOutput(int_param){Console.WriteLine(_param.ToString());}//...//Somewhereinacode{makeOutput(/*somenotc#codeforanexampleforwhatdoIwant*/function:int(){return0;});}是否可以使用真正的匿名函数(意味着返回结果)?我不想使用这样的委托(delegate)//Somewhereinacode{Funcx=()=>{return0;};makeOutput(x())}我也不想更

c# - 委托(delegate) : Method name expected error

我正在尝试让以下简单的委托(delegate)示例正常工作。根据我从中获取的一本书应该没问题,但我得到了一个Methodnameexpected错误。namespaceTestConsoleApp{classProgram{privatedelegatestringD();staticvoidMain(string[]args){intx=1;Dcode=newD(x.ToString());}}}有什么帮助吗? 最佳答案 删除():Dcode=newD(x.ToString);您想指定方法,而不是执行。

c# - 了解 Lambda 表达式和委托(delegate)

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestion我已经尝试解决这个问题很长时间了(阅读在线博客和文章),但到目前为止没有成功。什么是委托(delegate)?什么是Lambda表达式?两者的优缺点?何时使用其中一个或另一个的最佳实践?提前致谢。

c# - 委托(delegate)为属性 : Bad Idea?

考虑以下控件(为简洁起见被截断):publicpartialclassConfigurationManagerControl:UserControl{publicFuncCanEdit{get;set;}publicFuncCanDelete{get;set;}publicDictionarySettings{get{returnInnerSettings;}set{InnerSettings=value;BindData();}}privateDictionaryInnerSettings;privatevoidOnListIndexChanged(objectsender,Even

c# - 将方法存储为类的成员变量

我把这个作为“KeyEvent”类的成员之一:privatedelegatevoideventmethod();构造函数:publicKeyEvent(eventmethodD){D();}我想做的不是在那里调用D(),而是想将该方法(D)存储为KeyEvent的成员变量,因此类似于:stored_method=D();然后在KeyEvent的另一个方法中,执行如下操作:stored_method();我该怎么做? 最佳答案 您几乎已经有了代码。只需创建一个正确委托(delegate)类型的成员字段并将参数保存到它,就像您使用任何其

c# - 为什么后台线程中未处理的异常不会使应用程序域崩溃?

我完全不解。我非常确定,如果线程中存在未捕获的异常,.NET会关闭整个应用程序域,因此我从未测试过。但是我只是尝试了下面的代码并没有失败...谁能解释一下为什么?(在.NET4和3.5中试过)staticvoidMain(string[]args){Console.WriteLine("Mainthread{0}",Thread.CurrentThread.ManagedThreadId);Actiona=newAction(()=>{Console.WriteLine("Backgroundthread{0}",Thread.CurrentThread.ManagedThreadId

c# - 委托(delegate)会导致内存泄漏吗? GC.TotalMemory(true) 似乎表明如此

代码usingSystem;internalstaticclassTest{privatestaticvoidMain(){try{Console.WriteLine("{0,10}:Startpoint",GC.GetTotalMemory(true));ActionsimpleDelegate=SimpleDelegate;Console.WriteLine("{0,10}:Simpledelegatecreated",GC.GetTotalMemory(true));ActionsimpleCombinedDelegate=simpleDelegate+simpleDelegat