[Play with T]_[C# 类操作] 通过反射调用类型T的有参构造函数
2013-09-16 16:42
295 查看
As we all know, 我们可以通过方法:
实现对T的无参构造函数的调用。
而以下是T的构造函数包含多个参数的情况:
首先,假设我们的T会继承TBase类,这样,当T执行构造函数时,TBase的构造函数也会被调用,结果更清晰:
接着,需要对PlayTMethod进行修改
至此,T的构造函数完成调用,如果我们需要在构造函数中执行一些神奇又见不得人的方法,可以通过这样的方式来调用。
public void PlayTMethod<T>(T value) where T:Object where T: new () { .... }
实现对T的无参构造函数的调用。
而以下是T的构造函数包含多个参数的情况:
首先,假设我们的T会继承TBase类,这样,当T执行构造函数时,TBase的构造函数也会被调用,结果更清晰:
public class TBase { public TBase(string StringParameter, int IntParameter) { throw new NotImplementedException(); } }
接着,需要对PlayTMethod进行修改
public void PlayTMethod<T>(T value) where T: TBase where T: new () { //首先获取T的类型对象:tType Type tType = typeof(T); //定义Type数组,来存储T的构造函数的参数,这里我们需要T的构造函数参数有一个string以及一个int。 Type[] tParametersTypes = new Type[2]; //将string和int型存入参数组 tParametersTypes[0] = typeof(string); tParametersTypes[1] = typeof(int); //调用ConstructorInfo的GetConstructor方法生成T的构造函数结构, System.Reflection.ConstructorInfo constructorInfo = tType.GetConstructor(tParametersTypes); //constructorInfo现在就是T的构造函数的空壳,接下来获取构造函数参数的值 //同样是定义数组存储参数值 object[] parameterValues = new object[2]; parameterValues[0] = "String Parameter"; parameterValues[1] = 1; //最后执行invoke方法,将参数传入T的构造函数,返回值是object型,是必须的 object result = (T)constructorInfo.Invoke(parameterValues); }
至此,T的构造函数完成调用,如果我们需要在构造函数中执行一些神奇又见不得人的方法,可以通过这样的方式来调用。
相关文章推荐
- [Play with T]_[C# 类与属性操作] 通过克隆实现ObjectMap对List的填充
- 如何通过C#.NET中的反射机制来创建C#.NET泛型类的实例,并调用其方法??
- C#通过反射调用泛型方法
- [Unity&C#&接口]通过接口调用不同类型 物体 的继承了接口的组件
- Java反射 类类型就是可以操作的类本身 如何通过反射得到函数 函数返回值 函数参数
- C# 通过反射获取MVC Controller里的类名,方法名,参数列表,返回值类型,Description描述,自定义Attribute
- C#通过反射调用泛型参数方法介绍
- 通过反射(类类型)创建类的实例,调用类的方法,设置类的属性
- [Play with T]_[C# 类操作] 简化范型方法
- C#通过反射获取上层调用方法信息
- 黑马程序员--Java基础加强--15.利用反射操作泛型IV【通过反射Method解析泛型方法思路】【通过Method对四种Type子接口类型进行解剖】【使用递归对任意复合泛型类型进行彻底解剖】【个人
- C#关于通过反射PropertyType判读字符串类型方法
- 通过反射,如何操作私有成员变量(取/赋值),如何调用私有方法?
- C#通过反射进行枚举描述相关操作
- C# 直接调用vs 委托vs动态调用vs动态类型vs反射,最佳性能测试
- C#反射得并调用方法(方法参数类型)
- 用C#通过反射实现动态调用WebService 告别Web引用
- C#.NET dll封装(包含UI和实现函数),通过反射调用dll实现控件的快速加载(PrimPointList.cs)
- C# 反射-通过继承接口实现创建对象并调用方法
- C#反射之Assembly---CLR/c++可以通过反射调用c#类库