有这么二个类,如下:
class B{
 public Int32 x;
}class D:B{
 public Int32 y;
}
然后我进行实例化如下:
B b1=new D();
此时b1应为类D的对象(至少个人是这么认为的)!!!
但为什么b1.y不能访问呢??????

解决方案 »

  1.   

    B b1=new D();这句创建的对象确是D的实例,但其成员是受B限定的
    D d=(D)b1看看是不是能访问了
      

  2.   

    B  b = new D as B   正样不错吧!
      

  3.   

    访问前需要强制转换
    ((D)b1).y
      

  4.   

    zyip(非想非非想) 答案应该是正解吧???
    最楼上三位的答案!我根本没有搞反,是可以这么实例化的。
      

  5.   

    访问成员的时候看的不是实例的类型,而是看引用的类型。比如:
    object objStr = "123";对objStr就只能访问object类型的公开方法。假想一下,你有个方法Draw,接受Shape类型的参数。别人也会调用你这个方法,传输进来的也许是Shape的派类型,而这些都是在你编译Draw之后发生的,所以,引用所指向的实例的类型只有在运行时才能知道。你再捉摸捉摸,读读语言参考。