Возможно ли в C# получить ссылку на функцию-член без указания объекта, так что он можно использовать как статический метод расширения, взяв объект как первый параметр?Метод элемента C# как статический метод («метод обратного расширения»)
class Handler
{
public void Add(int value) { ... }
}
static class HandlerExtensions
{
public static void AddEx(this Handler instance, int value) { ... }
}
var x = new Handler();
// possible:
Action<int> func1 = x.Add;
Action<Handler, int> func2 = HandlerExtensions.AddEx;
// not possible?
Action<Handler, int> func3 = Handler::Add;
Зачем мне это нужно? Чтобы указать методы для вызова в классе до того фактического объекта для работы с:
// current solution:
void RegisterDto<DataType>(Func<Handler, Action<DataType>> handler) { ... }
RegisterDto<int>(x => x.Add);
// desired solution:
void RegisterDto<DataType>(Action<Handler, DataType> handler) { ... }
RegisterDto<int>(Handler::Add); // <--- does syntax for this exist?
Моя первая путаница в том, что где вы положили «// невозможно?» у вас нет метода '' '' ', который соответствует этой сигнатуре' Action '. Моя вторая - это то, что «X» - ваш класс называется «Handler» - не должен ли он быть «var x = new Handler()»? –
Jamiec
@Jamiec Извините, X является обработчиком – AyCe
так и думал - но мой первый вопрос ....? – Jamiec