我们有我们需要在飞行中产生的委托类型的要求。 我们需要产生给定的输入参数和输出的代表。 输入和输出是简单类型。
例如,我们需要生成
int Del(int, int, int, string)
和
int Del2(int, int, string, int)
关于如何让这个开始任何指针将是非常有益的。
我们需要分析制定其表示为XML。
例如,我们表示(A + B)作为
<ADD>
<param type="decimal">A</parameter>
<param type="decimal">B</parameter>
</ADD>
现在,我们希望这是暴露Func<decimal, decimal, decimal>
。 我们当然希望允许在XML,比如嵌套的节点:
(a + b) + (a - b * (c - d)))
我们要做到这一点使用表达式树和Expression.Compile
。
这种方法的可行性建议,欢迎。
最简单的方法是使用现有的Func
家庭代表。
使用typeof(Func<,,,,>).MakeGenericType(...)
例如,对于您的int Del2(int, int, string, int)
类型:
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);
}
}
如果你真的, 真的需要创建一个真正的新类型,也许你可以给一些更多的上下文来帮助我们来帮助你更好。
编辑:作为Olsin称, Func
类型是.NET 3.5的一部分-但如果你想在使用他们的.NET 2.0中,你只需要自己声明它们,就像这样:
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);
如果4个参数是不够的,你可以添加更多的课程。
如果你正在运行框架3.5(但并非每个人),乔恩的回答工作正常。
2.0答案是使用Delegate.CreateDelegate(...)
http://msdn.microsoft.com/en-us/library/system.delegate.createdelegate.aspx
各种方式来做到这一点,包括Jon的函数功能的比较,Delegate.CreateDelegate,DynamicMethods和其他各种招数是在更早的线程讨论:
Delegate.CreateDelegate VS DynamicMethod的VS表达
-Oisin