5、如何根据类型来动态创建对象
System.Activator提供了方法来根据类型动态创建对象,比如创建一个DataTable:
Type t = Type.GetType("System.Data.DataTable,System.Data,Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
DataTable table = (DataTable)Activator.CreateInstance(t);
例二:根据有参数的构造器创建对象
namespace TestSpace { public class TestClass { private string _value; public TestClass(string value) { _value=value; } } } … Type t = Type.GetType(“TestSpace.TestClass”); Object constructParms = new object {“hello”}; //构造器参数 TestClass obj = (TestClass)Activator.CreateInstance(t,constructParms); … |
6、如何获取方法以及动态调用方法
namespace TestSpace { public class TestClass { private string _value; public TestClass() { } public TestClass(string value) { _value = value; } public string GetValue( string prefix ) { if( _value==null ) return "NULL"; else return prefix+" : "+_value; } public string Value { set { _value=value; } get { if( _value==null ) return "NULL"; else return _value; } } } } |
上面是一个简单的类,包含一个有参数的构造器,一个GetValue的方法,一个Value属性,我们可以通过方法的名称来得到方法并且调用之,如:
//获取类型信息 Type t = Type.GetType("TestSpace.TestClass"); //构造器的参数 object constuctParms = new object{"timmy"}; //根据类型创建对象 object dObj = Activator.CreateInstance(t,constuctParms); //获取方法的信息 MethodInfo method = t.GetMethod("GetValue"); //调用方法的一些标志位,这里的含义是Public并且是实例方法,这也是默认的值 BindingFlags flag = BindingFlags.Public | BindingFlags.Instance; //GetValue方法的参数 object parameters = new object{"Hello"}; //调用方法,用一个object接收返回值 object returnValue = method.Invoke(dObj,flag,Type.DefaultBinder,parameters,null); |