C#技术问询:如何将自定义委托绑定至非静态方法
绑定自定义委托到非静态方法的分步指南
没问题,我来一步步教你搞定这个委托绑定的事儿~首先得补个小漏洞:你写的Invitation()方法声明了返回int,但方法体内没有任何return语句,这会直接编译失败,得先把这个坑填上——比如根据逻辑在方法末尾加个return 1;(或者其他符合你业务需求的返回值),不然委托绑定根本没法进行。
核心前提:非静态方法必须依赖类实例
非静态方法属于类的实例对象,而不是类本身,所以绑定前必须先创建该方法所属类的实例。假设你的方法都在一个叫JobCandidate的类里(你可以替换成自己实际的类名),咱们先把完整的类结构理清楚:
// 自定义委托 public delegate int Delegate(); public class JobCandidate { // 假设类里有这些字段(你原代码里用到了Age、YearExperience等) public int Age { get; set; } public int YearExperience { get; set; } public bool BachelorDegree { get; set; } public string Name { get; set; } public string Surname { get; set; } public new int WorkOffer() { if (Age >= 25 && YearExperience >= 1 && BachelorDegree == true) { Console.WriteLine("\nYou may be offered a job."); return 1; } else { Console.WriteLine("\nUnfortunately, there is no job for you."); return 0; } } // 修正后的Invitation方法,补充了return语句 public int Invitation() { if (WorkOffer() == 1) { Console.WriteLine("Dear " + Name + " " + Surname + ", soon you will receive\n" + "an email with date and time..."); } // 补充返回值,符合委托的返回类型要求 return 1; } }
步骤1:创建类的实例
因为是非静态方法,必须先实例化类对象才能引用方法:
// 创建JobCandidate的实例,并设置必要的属性值 JobCandidate candidate = new JobCandidate() { Age = 26, YearExperience = 2, BachelorDegree = true, Name = "John", Surname = "Doe" };
步骤2:绑定方法到委托
有两种常用的绑定方式,效果是一样的:
方式一:直接实例化委托(最常用)
// 绑定WorkOffer方法到委托 Delegate workOfferDelegate = candidate.WorkOffer; // 绑定修正后的Invitation方法到委托 Delegate invitationDelegate = candidate.Invitation;
方式二:使用Delegate.CreateDelegate方法(更灵活的场景用)
// 绑定WorkOffer Delegate workOfferDelegate = Delegate.CreateDelegate(typeof(Delegate), candidate, nameof(JobCandidate.WorkOffer)); // 绑定Invitation Delegate invitationDelegate = Delegate.CreateDelegate(typeof(Delegate), candidate, nameof(JobCandidate.Invitation));
步骤3:调用委托
绑定完成后,就可以像调用方法一样调用委托了:
// 调用WorkOffer委托 workOfferDelegate(); // 调用Invitation委托 invitationDelegate();
关键注意点
- 非静态方法绑定委托时,必须传入类的实例,不能像静态方法那样直接用
类名.方法名。 - 委托的签名(返回值+参数列表)必须和绑定的方法完全匹配,这也是为什么要先修正
Invitation()的返回值问题。
内容的提问来源于stack exchange,提问作者Настя Шпит
相关产品推荐
相关产品推荐

