Ошибка при инициализации делегата - C#
Формулировка задачи:
Добрый день,
Не смог ни понять ни найти, почему внутри метода можно создать объект делегата, а вне - нельзя? Код ниже:
Листинг программы
- namespace Chapter_Delegate
- {
- public class Media
- {
- public delegate int PlayerD();
- public void Report(PlayerD Play)
- {
- if (Play() == 0) Console.WriteLine("File is played sucsefully.");
- else Console.WriteLine("File is invalid.");
- }
- }
- public class AudioFile
- {
- private int status;
- public int AudioPlay()
- {
- Console.WriteLine("Playing audio file...");
- status = 0;
- return status;
- }
- }
- public class VideoFile
- {
- private int status;
- public int VideoPlay()
- {
- Console.WriteLine("Error by playing, video file is invalid...");
- status = -1;
- return status;
- }
- }
- public class Tester
- {
- public void Run()
- {
- Media myMedia = new Media();
- AudioFile myAu = new AudioFile();
- VideoFile myVd = new VideoFile();
- //instantiate the delegates
- Media.PlayerD MyDA = new Media.PlayerD(myAu.AudioPlay); //- если сделать вне метода Run() выдает ошибку..
- Media.PlayerD MyDV = new Media.PlayerD(myVd.VideoPlay);// почему компилятор ссылается на Tester.myAu?
- //public void Run() - вне метода не работает, почему?
- //{
- //call the delegates
- myMedia.Report(MyDA);
- myMedia.Report(MyDV);
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- Tester test = new Tester();
- test.Run();
- }
- }
- }
Решение задачи: «Ошибка при инициализации делегата»
textual
Листинг программы
- public class Tester
- {
- readonly AudioFile myAu;
- readonly VideoFile myVd;
- readonly Media.PlayerD MyDA;
- readonly Media.PlayerD MyDV;
- public Tester()
- {
- myAu = new AudioFile();
- myVd = new VideoFile();
- MyDA = new Media.PlayerD(myAu.AudioPlay);
- MyDV = new Media.PlayerD(myVd.VideoPlay);
- }
- public void Run()
- {
- Media myMedia = new Media();
- myMedia.Report(MyDA);
- myMedia.Report(MyDV);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д