Ошибка при инициализации делегата - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день, Не смог ни понять ни найти, почему внутри метода можно создать объект делегата, а вне - нельзя? Код ниже:
Листинг программы
  1. namespace Chapter_Delegate
  2. {
  3. public class Media
  4. {
  5. public delegate int PlayerD();
  6. public void Report(PlayerD Play)
  7. {
  8. if (Play() == 0) Console.WriteLine("File is played sucsefully.");
  9. else Console.WriteLine("File is invalid.");
  10. }
  11. }
  12. public class AudioFile
  13. {
  14. private int status;
  15. public int AudioPlay()
  16. {
  17. Console.WriteLine("Playing audio file...");
  18. status = 0;
  19. return status;
  20. }
  21. }
  22. public class VideoFile
  23. {
  24. private int status;
  25. public int VideoPlay()
  26. {
  27. Console.WriteLine("Error by playing, video file is invalid...");
  28. status = -1;
  29. return status;
  30. }
  31. }
  32. public class Tester
  33. {
  34. public void Run()
  35. {
  36. Media myMedia = new Media();
  37. AudioFile myAu = new AudioFile();
  38. VideoFile myVd = new VideoFile();
  39. //instantiate the delegates
  40. Media.PlayerD MyDA = new Media.PlayerD(myAu.AudioPlay); //- если сделать вне метода Run() выдает ошибку..
  41. Media.PlayerD MyDV = new Media.PlayerD(myVd.VideoPlay);// почему компилятор ссылается на Tester.myAu?
  42. //public void Run() - вне метода не работает, почему?
  43. //{
  44. //call the delegates
  45. myMedia.Report(MyDA);
  46. myMedia.Report(MyDV);
  47. }
  48.  
  49. }
  50. class Program
  51. {
  52. static void Main(string[] args)
  53. {
  54. Tester test = new Tester();
  55. test.Run();
  56. }
  57. }
  58. }

Решение задачи: «Ошибка при инициализации делегата»

textual
Листинг программы
  1. public class Tester
  2. {
  3.     readonly AudioFile myAu;
  4.     readonly VideoFile myVd;
  5.     readonly Media.PlayerD MyDA;
  6.     readonly Media.PlayerD MyDV;
  7.  
  8.     public Tester()
  9.     {
  10.         myAu = new AudioFile();
  11.         myVd = new VideoFile();
  12.  
  13.         MyDA = new Media.PlayerD(myAu.AudioPlay);
  14.         MyDV = new Media.PlayerD(myVd.VideoPlay);
  15.     }
  16.     public void Run()
  17.     {
  18.         Media myMedia = new Media();
  19.         myMedia.Report(MyDA);
  20.         myMedia.Report(MyDV);
  21.     }
  22. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы