C# 在c中动态创建复杂方法体#

C# 在c中动态创建复杂方法体#,c#,reflection.emit,C#,Reflection.emit,我有一个要求,我想用一个方法动态地创建一个类,该方法只需要很少的参数,并返回一些值。但是我的方法必须有一个逻辑,即在我的方法中,它将创建另一个类的实例,并调用tha的一个特定方法 e、 g 下面是我想要创建的类 public class Test { public object NewMethod(Type ClassType, object[] Data) { object obj = Activator.CreateInstance(ClassTyp

我有一个要求,我想用一个方法动态地创建一个类,该方法只需要很少的参数,并返回一些值。但是我的方法必须有一个逻辑,即在我的方法中,它将创建另一个类的实例,并调用tha的一个特定方法

e、 g 下面是我想要创建的类

public class Test 
{    
    public object NewMethod(Type ClassType, object[] Data)
    {
        object obj = Activator.CreateInstance(ClassType, Data);
        MethodInfo m = ClassType.GetMethod('MessageGenerator');
        return m.Invoke(obj, Data);
    }
}

打字能力强是你最好的朋友。不要试图回避它。如果您想了解弱类型化的语言是什么样子的,请以本漫画中的JavaScript和PHP示例为例:

如果该方法是一个简单的“多重chocie”方法,那么代表就是一条路。他们是事件背后的一半魔力。 Otherwise完全支持生成的函数。但正如其他人所说,这并非微不足道

至于动态类型:

一种方法是使用关键字dynamic,但我的建议是不要使用该关键字,除非你真的需要它。它将所有类型检查移动到运行时。此外,动态的工作原理有点像传染病:与动态变量一起使用的任何变量本身都是动态的。即使是函数的返回值也可以通过将动态值作为参数之一来更改为动态


如果这主要是关于存储来自WebService调用的数据,那么有一个稳定的助手:。它似乎比字典上的一些语法糖多一点。但它当然有助于存储数据,直到您可以将其转换为适当的预定义.NET类。

必须在运行时创建测试类,可能是通过使用反射来创建的。在运行时创建类型相对复杂-您最终必须使用
TypeBuilder
,这是非常重要的;你需要多少方法?例如,您是否可以将一个类型与基本上是
Func
的委托成员一起使用?然后可以使用表达式树API。另一种选择是:这将被使用多少?您现有的反射实现是否足够?“必须在运行时创建测试类,可能是通过使用reflection.Emit”-为什么?原因是什么?我们不是来把代码转换成反射发射的。你自己试过吗?您可能想看看CodeDOM。更容易的是,这不是将我的所有代码转换为反射发射。但它与AOP非常相似。更密切地说,你可以围绕建议说AOP。