Мне кажется, я так близок к тому, чтобы разобраться с этим и прочитал десятки статей и существующих вопросов.
У меня есть такой метод:
public T DoStuff(object arg1, object arg2)
{
/* Do stuff and return a T */
}
И мне нужно иметь возможность передать этот метод другому классу для целей обратного вызова.
Однако, когда этот другой класс перезванивает, он будет делать это с другим ожидаемым типом возврата, который известен только во время выполнения.
например:.
public void SomeMethod(MethodInfo m, ref object caller)
{
MethodInfo callback = m.MakeGenericMethod(new Type[] { runtimeType });
callback.Invoke(caller, new [] { arg1val, arg2val });
}
/* DoStuff() will make a call to SomeMethod() passing
* itself (the method and the object) */
Однако вместо этого я хотел бы иметь возможность
- Передача SomeMethod только одного объекта обратного вызова (то есть делегата или Func <>).
- Уметь изменять этот объект соответствующим образом для общего вызова.
- Иметь типобезопасные параметры для вызова, как я бы сделал с делегатом / Func <>.
Я нашел подходы, которые подходят для каждого из них в отдельности, но ни один не охватывает все из них.
Возможно ли это?