使用反射来确定调用哪个基类构造函数

时间:2010-08-04 04:31:48

标签: .net reflection constructor

使用类型DerivedClassB上的反射,我们可以确定:
a)它使用带有字符串参数的基类ctor b)它通过的实际价值?

public class BaseClass
{
    public BaseClass()
    {            
    }

    public BaseClass(string someParameter)
    {            
    }
}

public class DerivedClassA : BaseClass
{
    public DerivedClassA()
    {            
    }
}

public class DerivedClassB : BaseClass
{
    public DerivedClassB(): base("canWeFindThis")
    {            
    }
}

2 个答案:

答案 0 :(得分:4)

a)是的。从技术上讲,你可以找出调用哪些其他构造函数,如果从ConstructorInfo.GetMethodBody()读取信息但没有像Mono.Cecil这样的辅助库,则必须从字节数组中解码IL。

b)在您的情况下,是,但通常不是。反射只能用于反映静态数据,而不是运行时动态状态,因此您无法使用它来知道哪些值作为参数传递给构造函数,除非它被指定为文字,就像您所拥有的那样在哪种情况下,您可以使用与ConstructorInfo.GetMethodBody()或Mono.Cecil相同的技术。

答案 1 :(得分:1)

作为后续内容,我意识到传递给基类的值实际上是通过基类上的属性公开的。

因此,对于我的场景,我只是实例化了类型,然后询问了属性的值,以找出构造函数中实际传递的内容。 HTH。