我已经拿到一个Type对象type,以及这个Type的一个PropertyInfo,请问我怎样知道这个Property是完全继承于type.BaseType的呢,还是在baseType里定义然后在type里被new的或是override的或是其他的情况?
谢谢指教

解决方案 »

  1.   

    好像是不可以的,JIT只能在运行时,也就是程序执行到要调用的那个属性时才确定这个属性是该基类的还是子类的还是别的什么的
      

  2.   

    通过现成的这些class恐怕是无法知道的.
      

  3.   

    如果知道基类,比较两者的结构(中间代码级),应该可以看出来吧?和VTAB差不多的概念吧?(未证实,只是瞎猜)
      

  4.   

    xinggg(风之渡):基类倒可以通过type.BaseType拿到,我目前也确实通过GetProperties方法来比较二者的property结构。可问题是若某个property在继承类里是new 或者 override什么的不是很悲惨?如:
    基类:
    public class BaseClass
    {
      string p = string.Empty;
      public string Proerty { get { return p;} set {...}}
    }继承类1:
    public class InhertA : BaseClass
    {}和
    继承类2:
    public class InherB : BaseClass
    {
      public new string Property { get{..} set{...}}
    }分析出来根本没有区别嘛
      

  5.   

    没区别么?
    这段代码试一下,不知道可不可以达到你的要求(另外,你基类里的属性名和继承类里的属性名不同,估计是手误(差一个p)我改成一样了) BaseClass ClsTest;
    ClsTest= new  InhertA();
    System.Reflection.PropertyInfo[] ProArray= ClsTest.GetType().GetProperties();
    for( int i=0;i<ProArray.Length;i++)
    {
    MessageBox.Show(this,ProArray[i].Name.ToString() +" From:" + ProArray[i].DeclaringType.ToString());
    }
    ClsTest=null;
    ClsTest= new InherB(); ProArray = ClsTest.GetType().GetProperties();
    for( int i=0;i<ProArray.Length;i++)
    {
    MessageBox.Show(this,ProArray[i].Name.ToString() +" From:" + ProArray[i].DeclaringType.ToString());
    }
    ClsTest=null;
      

  6.   

    基本可以解决一些问题了。谢谢xinggg(风之渡)!也谢谢其他朋友。