Visual C# 2010 引入了一个新类型 dynamic。 该类型是一种静态类型,但类型为 dynamic 的对象会跳过静态类型检查。 大多数情况下,该对象就像具有类型 object 一样。 在编译时,将假定类型化为 dynamic 的元素支持任何操作。 因此,您不必考虑对象是从 COM API、从动态语言(例如 IronPython)、从 HTML 文档对象模型 (DOM)、从反射还是从程序中的其他位置获取自己的值。 但是,如果代码无效,则在运行时会捕获到错误。
dynamic可以简化反射。
Type ty = Type.GetType(_showModel.widgetName);
sub_widget = Activator.CreateInstance(ty) as UserControl;
//获取窗体初始化方法的信息
MethodInfo methodInitial = ty.GetMethod("Initial");
//方法的参数
object[] parameters = new object[] { _showModel.fieldList};
methodInitial.Invoke(sub_widget, BindingFlags.Public | BindingFlags.Instance, Type.DefaultBinder, parameters, null);
//dynamic show_sub_widget = sub_widget;
//show_sub_widget.Initial(_showModel.fieldList);