为事件定义空的委托主体是一种好习惯吗?可能重复:将匿名空委托添加到事件声明是否有不利之处?为事件定义一个空的委托主体是否是一种好的做法,这样您就不必担心引发没有事件处理程序的事件?(无需检查事件是否为空)。代码如下:publiceventEventHandlerLoadedData=delegate{};我当然觉得它很有用,是的。会有非常非常小的性能成本——但不必执行无效测试的可读性优势在IMO看来是值得的。值得指出的是,这是为数不多的使用匿名方法而不是lambda表达式的情况之一——否则您必须命名要忽略的参数,如下所示:publiceventEventHandlerLoadedData=(sender,args)=>{};我不想说我不打算使用的东西:)我不会那样做。有两个原因。首先,在调用它之前简单地检查处理程序是否为null是标准的。您可以在Microsoft参考资源和手册中的示例中看到这一点。其次,以这种方式初始化事件会在创建类时分配不必要的对象。这会给您的应用程序带来实际上不需要的额外内存压力。这是因为:publiceventEventHandlerLoadedData=delegate{};转化为:publiceventEventHandlerLoadedData=newEventHandlerdelegate{});如果您还没有这样做,将事件包装在一个特定的方法中会有很大帮助:publiceventEventHandlerMyEvent;protectedvirtualvoidOnMyEvent(EventArgse){if(MyEvent!=null)MyEvent(this,e);你可以使这个线程安全(r):publiceventEventHandlerMyEvent;protectedvirtualvoidOnMyEvent(EventArgse){varhandler=MyEvent;如果(处理程序!=null)处理程序(这个,e);我通常不使用C#,但这对我来说似乎是一种很好的做法。这是“空对象”模式的教科书应用。如上所述,这会在空委托实际运行时降低性能,但是当您不必每隔一段时间检查一次显式空值时,就会有性能提升-所以它应该是一个净赢性能太-只要空代表的频率很低,明智的。以上是C#学习教程:为事件定义一个空的委托体是个好习惯吗?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
