В потоке запущенным делегатом через метод экземпляра, нужно использовать тип int и char. как это сделать?

using System;
using System.Threading;
using System.Threading.Tasks;

namespace Delegates
{
    class Program
    {
        delegate void MessageHandler(string message);

        static void Main(string[] args)
        {
            // anonymous delegate
            MessageHandler handlerAnonymous = delegate(string msg)
            {
                Console.WriteLine(msg);
            };


            MessageHandler handlerStatic = new MessageHandler(WriteMessage);


            var @class = new Exemplar();

            MessageHandler handlerExemplar = @class.WriteMessage;

            // run each delegate in new Task
            Task.Run(() => handlerAnonymous("Hello from anonymous"));
            Task.Run(() => handlerStatic("Hello from static"));
            Task.Run(() => handlerExemplar("Hello from exemplar"));

            Console.ReadKey();
        }

        // static delegate
        private static void WriteMessage(string msg)
        {
            Console.WriteLine(msg);
        }
    }

    public class Exemplar // Использовать Int и Chair в методе экземпляра
    {
        // exemplar delegate
        public void WriteMessage(string msg)
        {
            Console.WriteLine(msg);
        }
    }
}

Ответы (1 шт):

Автор решения: Alexander Petrov

Добавим параметры int и char в конструктор класса:

public class Exemplar
{
    private readonly int _x;
    private readonly char _y;

    public Exemplar(int x, char y)
    {
        _x = x;
        _y = y;
    }
    public void WriteMessage(string msg)
    {
        Console.WriteLine(msg + " " + _x + " " + _y);
    }
}

Использование:

var @class = new Exemplar(5, 'a');

MessageHandler handlerExemplar = @class.WriteMessage;

Task.Run(() => handlerExemplar("Hello from exemplar"));

Вывод:

Hello from exemplar 5 a


Другой вариант.
Добавим параметры в метод:

public class Exemplar
{
    public void WriteMessage(string msg, int x, char y)
    {
        Console.WriteLine(msg + " " + x + " " + y);
    }
}

Создаём делегат следующим образом:

var @class = new Exemplar();

MessageHandler handlerExemplar = msg => @class.WriteMessage(msg, 5, 'a');

Task.Run(() => handlerExemplar("Hello from exemplar"));

Результат тот же самый.

→ Ссылка