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是一样的功能吗?
{
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是一样的功能吗?
A b = new B(); //b只能访问到A.B c = new B(); //c可以访问到B;也可访问到A.
那A b = new B(); 与A b = new A(); 有什么区别吗?
第一个是B的示例,可以转换为B c = b as B;
第二个是A的示例,不能转换为B。
B c = new B(); 是一样的。b和c只是内存对象的指向,
两个对象指向的都是B类的对象。故一样。
B c = new B(); 是一样的。 b和c只是内存对象的指向,
两个地址指向的都是B类的对象。故一样。
从本质上来b和c指向的都是B得对象,但是因为b用A声明的而c用B声明,这就限制了他们各自的访问权限(这么说好像不是很合理,通俗点说就是在VS中b.和c.出现的东西!),b只能够访问b内部的除private和protect修饰之外的属性和方法,而c能够访问自己以及和父类(B)的除private和protect修饰之外的属性和方法。
总的说来,就是二者在本质上(指内存存的东西)一样,使用的时候(指在VS中.出来的东西)不太一样。
B c = new B();
类型不一样
B d;
d=c; 没问题
d=b; 会报错吧
B(b).x;
B(b).y;
而只能
b.x