C#中如何在方法a()不存在时避免事件绑定报错?
解决方案:仅在方法存在时绑定事件
可以通过反射来检查main2类中是否存在a方法,只有当方法存在时才将其绑定到事件eve,这样就能避免方法不存在时的编译错误。
修改后的代码示例:
using static main.main2; using System.Reflection; namespace main; class MainClass { public delegate void dele(); public static event dele? eve; private static void Main() { // 获取main2类的Type对象 Type? main2Type = Type.GetType("main.main2"); if (main2Type != null) { // 查找无参的静态方法a MethodInfo? methodA = main2Type.GetMethod("a", BindingFlags.Public | BindingFlags.Static, Type.EmptyTypes); if (methodA != null) { // 将方法转换为dele委托并绑定到事件 dele? handler = (dele)Delegate.CreateDelegate(typeof(dele), methodA); eve += handler; } } eve?.Invoke(); } } // 当删除下面的main2类或a方法时,上面的代码不会报错 static class main2 { public static void a() { Console.WriteLine("A"); } }
关键点说明:
- 反射检查方法存在性:通过
Type.GetType获取目标类的类型,再用GetMethod查找指定方法,参数里明确指定方法的访问修饰符、静态特性以及无参的参数类型。 - 动态创建委托:如果方法存在,用
Delegate.CreateDelegate将MethodInfo转换为dele类型的委托,再绑定到事件。 - 空安全调用:最后用
eve?.Invoke()替代原来的空判断,写法更简洁。
内容的提问来源于stack exchange,提问作者Neo
相关产品推荐
相关产品推荐

