Какова цель этого делегата в основном методе? - PullRequest
0 голосов
/ 10 января 2019

Я узнаю о делегатах. Это пример кода (первый) из учебника по LinkedIn на C #. Я не могу определить преимущество и цель использования делегата. Непонятно, по каким причинам мы бы не называли эту функцию напрямую. Я набрал свой собственный код (второй), который, похоже, дает аналогичный результат.

namespace Delegates1._10._2018

{
    public delegate string MyDelegate(int arg1, int arg2);

    internal class Program
    {  
        static string func1(int a, int b)
        {
            return (a + b).ToString();
        }

        static string func2(int a, int b)
        {
            return (a * b).ToString();
        }

        static void Main(string[] args)
        {
            MyDelegate f = func1;
            Console.WriteLine("The number is: " + f(10,20));
            f = func2;
            Console.WriteLine("The number is: " + f(10,20));
        }
    }
}



internal class Program
    {
        public static int func1(int a, int b)
        {
            return (a + b);
        }
        public static int func2(int a, int b)
        {
            return (a * b);
        }

        static void Main(string[] args)
        {
            Console.WriteLine("The number is: " + func1(10, 20));
            Console.WriteLine("The number is: " + func2(10, 20));
        }
    }

Номер: 30 Номер: 200

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Пример плохой! Позвольте мне попытаться объяснить:

У нас есть классная машина, машина не знает, как себя вести, человек, сидящий в машине, знает, как ее вести. Таким образом, автомобиль просит человека (делегата), отвези меня!

public delegate int DriveMeWithSpeed(int maxForceOnPedal);
    public class Car
    {
        DriveMeWithSpeed speedy;

        public Car(DriveMeWithSpeed YourSpeed)
        {
            speedy = YourSpeed;
        }

        public void Drive()
        {
            if (speedy != null) speedy(100);
        }

    }
    public class Person
    {
        public int IDrive(int PedalForce)
        {
            return 40;
        }
    }

    public static void Main(string[] args)
        {
            Person Me = new Person();

            Car myCar = new Car(Me.IDrive);
            myCar.Drive();
        }

Итак, основная концепция заключается в том, что сам класс не всегда знает функциональность функции, поэтому он делегирует это классу, который знает, что делать.

0 голосов
/ 10 января 2019

Делегат просто объявляет форму метода (public delegate string MyDelegate(int arg1, int arg2);. Вы можете изменить, какой метод вызывается, как показано в вашем первом методе Main. Это надуманный пример, который не имеет большого преимущества, поскольку он не имеет дело с внешними данными или вводом для управления поведением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...