草庐IT

Delegates

全部标签

c# - 编译器为匿名方法生成了不正确的代码 [MS BUG FIXED]

请看下面的代码:publicabstractclassBase{publicvirtualvoidFoo()whereT:class{Console.WriteLine("base");}}publicclassDerived:Base{publicoverridevoidFoo(){Console.WriteLine("derived");}publicvoidBang(){Actionbang=newAction(delegate{base.Foo();});bang();//VerificationExceptionisthrown}}newDerived().Bang();抛出

c# - 在值类型上定义的扩展方法不能用于创建委托(delegate)——为什么不呢?

可以将扩展方法分配给与其在对象上的用法相匹配的委托(delegate),如下所示:staticclassFunnyExtension{publicstaticstringDouble(thisstringstr){returnstr+str;}publicstaticintDouble(thisintnum){returnnum+num;}}FuncaaMaker="a".Double;Funcdoubler=FunnyExtension.Double;Console.WriteLine(aaMaker());//Prints"aa"Console.WriteLine(doubler(

c# - 在值类型上定义的扩展方法不能用于创建委托(delegate)——为什么不呢?

可以将扩展方法分配给与其在对象上的用法相匹配的委托(delegate),如下所示:staticclassFunnyExtension{publicstaticstringDouble(thisstringstr){returnstr+str;}publicstaticintDouble(thisintnum){returnnum+num;}}FuncaaMaker="a".Double;Funcdoubler=FunnyExtension.Double;Console.WriteLine(aaMaker());//Prints"aa"Console.WriteLine(doubler(

C# - 事件关键字的优势?

我最近了解到C#“事件”确实如此。老实说,这真的没什么。总结一下我的发现:event关键字只是一个仅适用于委托(delegate)的修饰符。因此,事件的所有“魔力”都是委托(delegate)的操作。而已。我已经阅读了很多Microsoft文档,但是没有一句话以这种方式总结得如此简洁。继续我的发现,delegate、class和struct都处于同一“级别”。它们是定义“对象”的方法。我的意思不是类型中的“对象”,而是“某物”的封装概念。就像在说面向对象编程时如何使用“对象”这个词一样。无论如何,“对象”都有一定的修饰语。例如,sealed、readonly、virtual、stati

C# - 事件关键字的优势?

我最近了解到C#“事件”确实如此。老实说,这真的没什么。总结一下我的发现:event关键字只是一个仅适用于委托(delegate)的修饰符。因此,事件的所有“魔力”都是委托(delegate)的操作。而已。我已经阅读了很多Microsoft文档,但是没有一句话以这种方式总结得如此简洁。继续我的发现,delegate、class和struct都处于同一“级别”。它们是定义“对象”的方法。我的意思不是类型中的“对象”,而是“某物”的封装概念。就像在说面向对象编程时如何使用“对象”这个词一样。无论如何,“对象”都有一定的修饰语。例如,sealed、readonly、virtual、stati

c# - 如何使用反射调用扩展方法?

我明白以前有人问过类似的问题,但我很难在下面的代码中调用LinqWhere方法。我希望使用反射来动态调用此方法,并动态构建Where子句中使用的委托(delegate)(或lambda)。这是一个简短的代码示例,一旦运行,将有助于构成我正在构建的解释型DSL的一部分。干杯。publicstaticvoidCallWhereMethod(){ListmyObjects=newList(){newMyObject{Name="JonSimpson"}};System.DelegateNameEquals=BuildEqFuncFor("Name","JonSimpson");object[

c# - 如何使用反射调用扩展方法?

我明白以前有人问过类似的问题,但我很难在下面的代码中调用LinqWhere方法。我希望使用反射来动态调用此方法,并动态构建Where子句中使用的委托(delegate)(或lambda)。这是一个简短的代码示例,一旦运行,将有助于构成我正在构建的解释型DSL的一部分。干杯。publicstaticvoidCallWhereMethod(){ListmyObjects=newList(){newMyObject{Name="JonSimpson"}};System.DelegateNameEquals=BuildEqFuncFor("Name","JonSimpson");object[

c# - 在单独的 AppDomain 中传递和执行委托(delegate)

我想用委托(delegate)在单独的AppDomain中执行一些代码。我该怎么做?UPD1:关于我的问题的更多细节我的程序处理一些数据(一个迭代是:从数据库获取一些数据,评估它并在运行时创建程序集,执行动态程序集并将结果写入数据库)。当前解决方案:每次迭代都在单独的线程中运行。更好的解决方案:每次迭代都在单独的AppDomain中运行(以卸载动态组件)。UPD2:所有,感谢您的回答。我在这个线程中为我找到了一个:ReplacingProcess.StartwithAppDomains 最佳答案 虽然您可以调用将由单独的AppDom

c# - 在单独的 AppDomain 中传递和执行委托(delegate)

我想用委托(delegate)在单独的AppDomain中执行一些代码。我该怎么做?UPD1:关于我的问题的更多细节我的程序处理一些数据(一个迭代是:从数据库获取一些数据,评估它并在运行时创建程序集,执行动态程序集并将结果写入数据库)。当前解决方案:每次迭代都在单独的线程中运行。更好的解决方案:每次迭代都在单独的AppDomain中运行(以卸载动态组件)。UPD2:所有,感谢您的回答。我在这个线程中为我找到了一个:ReplacingProcess.StartwithAppDomains 最佳答案 虽然您可以调用将由单独的AppDom

C# 无法将方法转换为非委托(delegate)类型

我有一个类叫做Pin.publicclassPin{privatestringtitle;publicPin(){}publicsetTitle(stringtitle){this.title=title;}publicStringgetTitle(){returntitle;}}在另一个类中,我在List中添加Pins对象引脚和另一个我想迭代列表引脚并获取元素。所以我有这段代码。foreach(PinobjinClassListPin.pins){stringt=obj.getTitle;}使用此代码我无法检索标题。为什么?(注意:ClassListPin只是一个包含一些元素的静态类