在.NET的Reflection中,ConstructorInfo和MethodInfo都是从MethodBase直接继承而来的.
MethodInfo的Invoke函数使用很简单,就是直接
MethodInfo.Invoke(object target,object[]
parameters);
但是ConstructorInfo的Invoke函数有一点不一样.
同MethodInfo,ConstructorInfo的Invoke也有这种形式的重载...
ConstructorInfo.Invoke(object target ,object[]
parameters);
这个Invoke用在调用父类的构造函数的时,也就是对已有的一个对象,去调用他的构造函数.即:
class Father{
public Father(...){}
}
class Son :
Father{
public
Son(...):base(...){}
}
Son的构造函数的IL代码中,就会有相当于如下的函数的调用:
ConstructorInfo.Invoke( this,
parameters);
//具体的代码可以参考AOP.NET中ProxyFactory的AopBaseHandler.cs中的Invoke函数.
通过这种方式,完成子类Son对其父类Father的构造函数的调用.
ConstructorInfo.Invoke还有一种形式:
object ConstructorInfo.Invoke( object[]
parameters);
这个就是用来生成一个新的对象用的.即:
object
target = ConstructorInfo.Invoke(parameters);
和
object target = new
Son(parameters);
是一样的...
通过这个函数可以得到一个新的对象.和new是一样的效果.
使用这个的时候可能要注意一下:P
MethodInfo的Invoke函数使用很简单,就是直接
MethodInfo.Invoke(object target,object[]
parameters);但是ConstructorInfo的Invoke函数有一点不一样.
同MethodInfo,ConstructorInfo的Invoke也有这种形式的重载...
ConstructorInfo.Invoke(object target ,object[]
parameters);
这个Invoke用在调用父类的构造函数的时,也就是对已有的一个对象,去调用他的构造函数.即:
class Father{
public Father(...){}
}
class Son :
Father{
public
Son(...):base(...){}
}
Son的构造函数的IL代码中,就会有相当于如下的函数的调用:
ConstructorInfo.Invoke( this,
parameters);//具体的代码可以参考AOP.NET中ProxyFactory的AopBaseHandler.cs中的Invoke函数.
通过这种方式,完成子类Son对其父类Father的构造函数的调用.
ConstructorInfo.Invoke还有一种形式:
object ConstructorInfo.Invoke( object[]
parameters);
这个就是用来生成一个新的对象用的.即:
object
target = ConstructorInfo.Invoke(parameters);
和
object target = new
Son(parameters);
是一样的...
通过这个函数可以得到一个新的对象.和new是一样的效果.
使用这个的时候可能要注意一下:P