您的位置:首页 > 编程语言 > C#

[Play with T]_[C# 类操作] 通过反射调用类型T的有参构造函数

2013-09-16 16:42 295 查看
As we all know, 我们可以通过方法:

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的构造函数完成调用,如果我们需要在构造函数中执行一些神奇又见不得人的方法,可以通过这样的方式来调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐