Ошибка при инициализации делегата - 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);
    }
}

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


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

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

11   голосов , оценка 4 из 5
Похожие ответы