Morpheus_God
@Morpheus_God

Фокус с делегатом. Как его исполнить?

Добрый день.
Есть вот такой код.
namespace DelegateDemo
{
    public delegate string DemoDel(string s);
   
    class Program
    {
  
        static void Main(string[] args)
        {
            
            Console.ReadKey();
        }

        static bool ParamMethod(DemoDel d)
        {
            if(d = "2")
            {

            }
        }
        static string DelLink(string s)
        {
            return "2";
        }
    }
}

Я создал делегат с сигнатурой
public delegate string DemoDel(string s);
Реализовал метод схожий с делегатом.
static string DelLink(string s)
        {
            return "2";
        }

И возник вопрос:) Как передать делегат с параметром в другой метод?
static bool ParamMethod(DemoDel d)
        {
            if(d = "2") // Вот тут требует параметры которые дописаны у делегата. 
            {

            }
        }

Я не знаю зачем мне это надо, но вот такая ерунда всплыла в голове. Как передавать метод1 который имеет параметры параметром в метод2 и в методе2 уже исходя из полученных данных метода1 выполнять что либо.
P.S докину еще скриншот из студии.
spoiler
5c741ebe7bb55755667663.png
  • Вопрос задан
  • 157 просмотров
Решения вопроса 1
lexxpavlov
@lexxpavlov
Программист, преподаватель
namespace DelegateDemo
{
    public delegate string DemoDel(string s);
   
    class Program
    {  
        static void Main(string[] args)
        {
            ParamMethod(DelLink); // передача ссылки на метод DelLink в ParamMethod
            ParamMethod(s => "(" + s + ")"); // передача анонимной функции в ParamMethod
            Console.ReadKey();
        }

        static bool ParamMethod(DemoDel d)
        {
            if(d("что угодно") == "2")
            {
                Console.WriteLine("делегат вернул 2");
            }
            if(d("5") == "(5)" && d("100500") == "(100500)")
            {
                Console.WriteLine("делегат обернул число в скобки");
            }
        }
        static string DelLink(string s)
        {
            return "2";
        }
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@youkerni
Unity3D developer
Не особо вникал в Ваш вопрос, но по-поему Вы немного не до конца понимаете что делегат - ссылка на метод. Ваш ParamMethod принимает ССЫЛКУ на метод, а вы пытаетесь передать в агрументы вызов делегата, результатом которого, в данном случае, является string.

Еще одним доказательством тому схожая ошибка в ParamMethod - вы пытаетесь сравнить ссылку на метод и строку.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы