当前位置: 首页 > 编程语言 > C#

检查方法与给定委托的兼容性?分享

时间:2023-04-10 12:45:28 C#

检查与给定委托的方法兼容性?在C#代码中,如何检查给定的方法是否可以由特定的委托类型表示?我首先根据我对类型的了解尝试了一些事情://要测试的委托。voidTargetDelegate(字符串消息);//和...varmethodInfo=Type.GetMethod(..);//获取MethodInfo实例。//尝试测试它typeof(TargetDelegate).IsAssignableFrom(methodInfo.GetType());但这只涉及类型而不涉及方法——它总是错误的。我倾向于相信答案在于委托类型,但我现在只是在FCL中徘徊。任何帮助将不胜感激。我尝试:Delegate.CreateDelegate(typeof(TargetDelegate),methodInfo,false)!=null这将尝试创建委托并在失败时返回null。如果它返回null,则表示无法创建委托。如果它返回任何其他内容,代表一定没问题。我不知道反射库中有执行此操作的方法。我认为这不会太困难。直接情况的规则是,必须存在从方法的返回类型到委托的返回类型的保留表示的转换,并且必须存在从每个委托的参数类型到每个方法的参数类型的保留表示的转换。也就是说,如您所料,兼容性关系在返回类型和参数类型的逆变中是协变的。有涉及curried委托的更复杂的情况,但我认为你可能不想进入这些,除非你正在为函数式语言编写编译器。(你是在为函数式语言编写编译器吗?)可能有更优雅的方法,但你可以尝试创建委托并检查异常:http://msdn.microsoft.com/en-us/library/ms228976.aspx说你有上面的C#学习教程:CheckmethodcompatibilitywithgivenDelegate?如果分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注——privatedelegateintMyDelegate(stringa);privateintFoo(stringa){}MethodInfomFoo=this.GetType().GetMethod("Foo");var@delegate=Delegate.CreateDelegate(typeof(MyDelegate),mFoo,false);if(@delegate!=null){//兼容}else{//不兼容}网络收藏不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: