2010-08-04 36 views
1

的类型使用反射DerivedClassB我们可以确定:
一个),它使用的基类构造函数采用一个串PARAM
b)中,它通过的实际值?使用反射来确定哪个基类构造函数被调用

public class BaseClass 
{ 
    public BaseClass() 
    {    
    } 

    public BaseClass(string someParameter) 
    {    
    } 
} 

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

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

回答

4

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

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

+0

谢谢。 Re b) - 因为在我的例子中,被传递的字符串是一个字面值,它是否可以在IL中找到? – zadam 2010-08-05 01:44:40

+0

是的,你是对的。我更新了我的答案以反映这一点,可以这么说。 – 2010-08-05 09:53:45

1

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

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

相关问题