Я пытаюсь ограничить тип возвращаемого значения универсального делегата без указания сигнатуры параметра, и я не знаю, как это сделать, или если это вообще возможно.
Как я могу это сделать или это невозможно?
Мое исследование провалилось. Некоторый псевдо-C # код, вероятно, поможет вам сделать то, что я пытаюсь сделать:
public class SomeClass< T, U > where T : Delegate // returning U
{
private someDelegate;
public SomeClass( T someDelegate )
{
this.someDelegate = someDelegate;
}
public U Run()
{
return someDelegate.DynamicInvoke();
}
}
... В другом месте
public delegate string aDelegate();
public static string SayHi()
{
return "Hello!";
}
aDelegate greeter = SayHi;
var something = new SomeClass< aDelegate, string>( greeter );
Console.WriteLine( something.Run() ); // Should write "Hello" to the console.
Я знаю, что это довольно надуманный псевдо-пример. Конечно, я стремлюсь к более активному использованию. Я пытаюсь написать консольный класс меню, который бы связывал список заданных опций меню с действиями, которые запускались бы в зависимости от того, какую опцию выбрал пользователь. Прямо сейчас он просто возвращает строку, выбранную пользователем из меню. То, что я хотел бы сделать, это вернуть то, что - если что-нибудь - возвращает связанный метод. Возможно, это может быть возвращено с выбранной пользователем строкой опций в кортеже ... Но я подумал, что этот мини-пример просто привел меня к техническому препятствию, с которым я столкнулся.
Спасибо!