VB.NET中有没有办法知道处理程序是否已为事件注册?在C#中我可以测试这个...publiceventEventHandlerTrigger;protectedvoidOnTrigger(EventArgse){if(Trigger!=null)Trigger(this,e);有没有办法在VB.NET中做到这一点?测试null我的意思是?我忘记提及的更多信息。我有用C#编写的类,但我用VB.NET编写单元测试。我在单元测试中尝试这样做...如果myObject.TriggerIsNotNothingThen''#dosomethingEndIf这会导致编译时错误显示...“公共事件触发器是一个事件,不能直接调用。使用RaiseEvent语句引发事件。”Seth在问题1129517中就如何在C#中执行此操作进行了有趣的讨论。由于包含Event的类是用C#编写的,因此委托语义确实适用,这些技术应该适合您。但是,您需要将源代码转换为VB.NET以进行单元测试。给定C#程序集中的以下类:publicclassTriggerific{publiceventEventHandlerTrigger;privatestaticvoidOnTriggerTriggered(objectsender,EventArgse){Console.WriteLine("Triggered!");}publicvoidAddTrigger(){Trigger+=OnTriggerTriggered;下面是一些VB.NET代码,可以正确确定是否为触发事件注册了处理程序:)EndSub私有共享函数GetEventHandler(ByValclassInstanceAsObject,ByValeventNameAsString)AsEventHandler或BindingFlags.Instance)DimeventDelegateAsEventHandler=DirectCast(eventField.GetValue(classInstance),EventHandler)'如果没有侦听器附加到EeventRet,则eventDelegate将为null/Nothing。null在VisualBasic中称为“Nothing”。IfTriggerIsNotNothingThenUpdate上面的答案描述了如何在VB.NET中检查空内容。遗憾的是,事件由VB.NET编译器处理。对于此事件定义:PublicEventTriggerasEventHandler您将使用此代码检查订阅IfTriggerEventIsNothing请注意VB.Net如何添加一个带有后缀Event的字段来表示委托。在这里查看解释。首先,你的c#代码有问题。它应该像这样阅读,以减少在错误的时间删除单独线程中的最后一个处理程序的竞争条件的可能性(提示其工作原理:多播委托是不可变的):publiceventEventHandlerTrigger;protectedvoidOnTrigger(EventArgse){vartemp=Trigger;如果(温度!=null)温度(这个,e);其次,在VB.Net中根本不需要这段代码。VB处理事件的方式略有不同,因此您根本不应该检查是否有任何处理程序已注册。RaiseEvent是安全且首选的:PublicEventTriggerAsEventHandlerFriendSubOnTrigger(ByValeAsEventArgs)RaiseEventTrigger(Me,e)EndSub我相信我在VB.Net中使用的语法是:PublicEventTriggerAsEventHandlerFriendSubOnTrigger(ByValeAsEventArgs)IfTriggerEventIsNotNothingThenRaiseEventTrigger(Me,e)EndIfEndSub即使似乎没有声明TriggerEvent,编译器也能理解它。它更接近于模仿C#语法。另外,我已经阅读了带有处理程序的代码来检查运行的代码,但我现在不能指出这一点,因此您可以接受或保留它。无论如何,我认为这就是语法。如果不太合适,请不要开枪!您不应该检查单元测试以查看处理程序是否已注册。您如何知道它是否是正确的处理程序,或者它是否是正确的处理程序但行为不正确?你的考试意义何在?VB.NET中有一个有趣的语言“函数”。为暴露委托的事件创建一个成员变量:PublicEventMyEventAsEventHandlerPublicSubTest()Dimtest=MyEventEventDiminvokers=test.GetInvocationList()EndSub您实际上可以通过这种方式获取调用列表。以上是C#学习教程:VB.NET中有没有办法知道某个事件是否注册了处理程序?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: