关于继承的一个简单的问题

DrinkBeer 2009-12-24 03:25:37
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是一样的功能吗?
...全文
82 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
woshifou 2009-12-24
  • 打赏
  • 举报
回复
学习。
angel6709 2009-12-24
  • 打赏
  • 举报
回复
b在不转型的情况访问不到y
B(b).x;
B(b).y;
而只能
b.x
bancxc 2009-12-24
  • 打赏
  • 举报
回复
A b = new B();
B c = new B();
类型不一样
B d;
d=c; 没问题
d=b; 会报错吧
angel6709 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 libinguest 的回复:]
A b = new B();
B c = new B();

是一样的。

b和c只是内存对象的指向,
两个对象指向的都是B类的对象。故一样。
[/Quote]

b在不转型的情况访问不到y
ctwei86 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 libinguest 的回复:]
A b = new B();
B c = new B();

是一样的。

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

是一样的。

b和c只是内存对象的指向,
两个地址指向的都是B类的对象。故一样。
风之影子 2009-12-24
  • 打赏
  • 举报
回复
A b = new B();
B c = new B();

是一样的。

b和c只是内存对象的指向,
两个对象指向的都是B类的对象。故一样。
starts_2000 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 drinkbeer 的回复:]
引用 1 楼 koukoujiayi 的回复:
应该是不一样的!!
A b = new B(); //b只能访问到A.

B c = new B(); //c可以访问到B;也可访问到A.




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

第一个是B的示例,可以转换为B c = b as B;
第二个是A的示例,不能转换为B。
DrinkBeer 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 koukoujiayi 的回复:]
应该是不一样的!!
A b = new B(); //b只能访问到A.

B c = new B(); //c可以访问到B;也可访问到A.



[/Quote]

那A b = new B(); 与A b = new A(); 有什么区别吗?
koukoujiayi 2009-12-24
  • 打赏
  • 举报
回复
应该是不一样的!!
A b = new B(); //b只能访问到A.

B c = new B(); //c可以访问到B;也可访问到A.


111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧