public class A
{
  int x=1;
}public class B:A
{
    int y=1;
}    class Program
    {
        static void Main(string[] args)
        {
           A b = new B();
           B c = new B();
           Console.ReadLine();
        }
    }b和c是一样的功能吗?

解决方案 »

  1.   

    应该是不一样的!!
    A b = new B(); //b只能访问到A.B c = new B(); //c可以访问到B;也可访问到A.
      

  2.   


    那A b = new B(); 与A b = new A(); 有什么区别吗?
      

  3.   


    第一个是B的示例,可以转换为B c = b as B;
    第二个是A的示例,不能转换为B。
      

  4.   

    A b = new B(); 
    B c = new B(); 是一样的。b和c只是内存对象的指向,
    两个对象指向的都是B类的对象。故一样。
      

  5.   

    A b = new B(); 
    B c = new B(); 是一样的。 b和c只是内存对象的指向, 
    两个地址指向的都是B类的对象。故一样。
      

  6.   

        同意该说法,补充一点个人观点。
        从本质上来b和c指向的都是B得对象,但是因为b用A声明的而c用B声明,这就限制了他们各自的访问权限(这么说好像不是很合理,通俗点说就是在VS中b.和c.出现的东西!),b只能够访问b内部的除private和protect修饰之外的属性和方法,而c能够访问自己以及和父类(B)的除private和protect修饰之外的属性和方法。
        总的说来,就是二者在本质上(指内存存的东西)一样,使用的时候(指在VS中.出来的东西)不太一样。
      

  7.   

    A b = new B(); 
    B c = new B(); 
    类型不一样 
    B d; 
    d=c; 没问题 
    d=b; 会报错吧 
      

  8.   

    b在不转型的情况访问不到y 
    B(b).x;
    B(b).y;
    而只能
    b.x