Generating Delegate Types dynamically in C#
The simplest way would be to use the existing Func
family of delegates.
Use typeof(Func<,,,,>).MakeGenericType(...)
. For example, for your int Del2(int, int, string, int)
type:
using System;
class Test
{
static void Main()
{
Type func = typeof(Func<,,,,>);
Type generic = func.MakeGenericType
(typeof(int), typeof(int), typeof(string),
typeof(int), typeof(int));
Console.WriteLine(generic);
}
}
If you really, really need to create a genuinely new type, perhaps you could give some more context to help us help you better.
EDIT: As Olsin says, the Func
types are part of .NET 3.5 - but if you want to use them in .NET 2.0, you just have to declare them yourself, like this:
public delegate TResult Func<TResult>();
public delegate TResult Func<T, TResult>(T arg);
public delegate TResult Func<T1, T2, TResult>(T1 arg1, T2 arg2);
public delegate TResult Func<T1, T2, T3, TResult>
(T1 arg1, T2 arg2, T3 arg3);
public delegate TResult Func<T1, T2, T3, T4, TResult>
(T1 arg1, T2 arg2, T3 arg3, T4 arg4);
If 4 arguments isn't enough for you, you can add more of course.