Such a question, why in the delegate declaration in this example do you need the generic parameters <T1, T2> if they are not in the conjuncture of the method the delegate refers to, that is, all input and output parameters are defined by a specific data type, what determines T1 and T2? (without them an error).
namespace ConsoleApplication14 { delegate bool askUser <T1, T2> (string question, Action<string> action, out int age); class Program { static bool AskUser(string questionText, Action<string> tellUser, out int age) { // метод на который ссылается делегат askUser return false; }