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

时间:2018-10-20 13:33:12

标签: c# reflection.emit

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

例如 下面是我要创建的类。

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);
    }
}

1 个答案:

答案 0 :(得分:-2)

强大的典型性是您最大的朋友。不要试图绕开它。如果您想看一看典型性较弱的语言,请参考此漫画中的JavaScript和PHP示例: http://www.sandraandwoo.com/2015/12/24/0747-melodys-guide-to-programming-languages/

如果该方法是简单的“多重选择”,则委托是可行的方法。它们是事件背后的魔力的一半。 在其他方面,对entirely at runtime生成的函数也提供完全支持。但是,正如其他人所说,这并非微不足道。

关于动态类型:

一种方法是动态关键字,但我的建议是除非您确实需要,否则请不要使用该关键字。它将所有类型检查移至运行时。此外,动态机制有点像传染病:与动态变量一起使用的任何变量本身都会变成动态变量。只需将动态值作为参数之一,就可以将函数的返回值更改为动态值。

如果这主要是关于存储来自WebService调用的数据,则有一个稳定的帮助程序:ExpandoObject。它似乎只不过是字典上的一些语法糖而已。但这肯定有助于存储数据,直到您可以将其转换为适当的,预先定义的.NET类为止。