Program.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System;
  2. namespace ConsoleApp1
  3. {
  4. class Program
  5. {
  6. // 定义委托,并引用一个方法,这个方法需要获取一个int型参数返回void
  7. internal delegate void Feedback(int value);
  8. static void Main(string[] args)
  9. {
  10. StaticDelegateDemo();
  11. InstanceDelegateDemo();
  12. Console.ReadKey();
  13. }
  14. /// <summary>
  15. /// 静态调用
  16. /// </summary>
  17. private static void StaticDelegateDemo()
  18. {
  19. Console.WriteLine("---------委托调用静态方法------------");
  20. Counter(1, 10, null);
  21. Counter(1, 10, new Feedback(FeedbackToConsole));
  22. }
  23. /// <summary>
  24. /// 实例调用
  25. /// </summary>
  26. private static void InstanceDelegateDemo()
  27. {
  28. Console.WriteLine("---------委托调用实例方法------------");
  29. Program p = new Program();
  30. Counter(1, 10, null);
  31. Counter(1, 5, new Feedback(p.InstanceFeedbackToConsole));
  32. }
  33. /// <summary>
  34. /// 静态回调方法
  35. /// </summary>
  36. /// <param name="value"></param>
  37. private static void FeedbackToConsole(int value)
  38. {
  39. // 依次打印数字
  40. Console.WriteLine("Item=" + value);
  41. }
  42. /// <summary>
  43. /// 实例回调方法
  44. /// </summary>
  45. /// <param name="value"></param>
  46. private void InstanceFeedbackToConsole(int value)
  47. {
  48. Console.WriteLine("Item=" + value);
  49. }
  50. /// <summary>
  51. /// 使用此方法触发委托回调
  52. /// </summary>
  53. /// <param name="from">开始</param>
  54. /// <param name="to">结束</param>
  55. /// <param name="fb">委托引用</param>
  56. private static void Counter(int from, int to, Feedback fb)
  57. {
  58. for (int val = from; val <= to; val++)
  59. {
  60. // fb不为空,则调用回调方法
  61. if (fb != null)
  62. {
  63. fb(val);
  64. }
  65. //fb?.Invoke(val); 简化版本调用
  66. }
  67. }
  68. }
  69. }