В потоке запущенным делегатом через метод экземпляра, нужно использовать тип 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"));
Результат тот же самый.