Program.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. var a = 500 / 26000.00;
  11. StaticDelegateDemo();
  12. InstanceDelegateDemo();
  13. Console.ReadKey();
  14. }
  15. /// <summary>
  16. /// 静态调用
  17. /// </summary>
  18. private static void StaticDelegateDemo()
  19. {
  20. Console.WriteLine("---------委托调用静态方法------------");
  21. Counter(1, 10, null);
  22. Counter(1, 10, new Feedback(FeedbackToConsole));
  23. }
  24. /// <summary>
  25. /// 实例调用
  26. /// </summary>
  27. private static void InstanceDelegateDemo()
  28. {
  29. Console.WriteLine("---------委托调用实例方法------------");
  30. Program p = new Program();
  31. Counter(1, 10, null);
  32. Counter(1, 5, new Feedback(p.InstanceFeedbackToConsole));
  33. }
  34. /// <summary>
  35. /// 静态回调方法
  36. /// </summary>
  37. /// <param name="value"></param>
  38. private static void FeedbackToConsole(int value)
  39. {
  40. // 依次打印数字
  41. Console.WriteLine("Item=" + value);
  42. }
  43. /// <summary>
  44. /// 实例回调方法
  45. /// </summary>
  46. /// <param name="value"></param>
  47. private void InstanceFeedbackToConsole(int value)
  48. {
  49. Console.WriteLine("Item=" + value);
  50. }
  51. /// <summary>
  52. /// 使用此方法触发委托回调
  53. /// </summary>
  54. /// <param name="from">开始</param>
  55. /// <param name="to">结束</param>
  56. /// <param name="fb">委托引用</param>
  57. private static void Counter(int from, int to, Feedback fb)
  58. {
  59. for (int val = from; val <= to; val++)
  60. {
  61. // fb不为空,则调用回调方法
  62. if (fb != null)
  63. {
  64. fb(val);
  65. }
  66. //fb?.Invoke(val); 简化版本调用
  67. }
  68. }
  69. }
  70. }