C#继承问题

wlpgam 2015-04-16 12:46:14
问题1:
子类会自动拥有父类除了构造方法和析构方法以外的所有成员,,,
这是书上说的,,
那么问题来了,
请问为什么要除了构造方法和析构方法?
---------------------------------------------------------------------------------------------
问题2:
既然如果要重写父类方法时必须加virtual,也就是没有virtual就不能重写,
那么还要sealed来干嘛?
...全文
134 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2015-04-16
  • 打赏
  • 举报
回复
你看的什么书?怎么净胡说八道
xuzuning 2015-04-16
  • 打赏
  • 举报
回复
如果类的构造方法的访问级别是private 那么这个类就不可被 new 实例化 单例模式就是通过声明私有的构造函数实现的
wlpgam 2015-04-16
  • 打赏
  • 举报
回复
谢谢,,分全给你了
圣殿骑士18 2015-04-16
  • 打赏
  • 举报
回复
那如果父类的这个无参构造方法的访问级别是private呢,子类就不能继承了吧,是吗? -- 那当然了,否则protect干什么用呢
圣殿骑士18 2015-04-16
  • 打赏
  • 举报
回复
如果你这些概念都是书上看来的,建议不要看这本书了。 看些经典的书籍就够了
wlpgam 2015-04-16
  • 打赏
  • 举报
回复
这种说法正解,, 那如果父类的这个无参构造方法的访问级别是private呢,子类就不能继承了吧,是吗?
圣殿骑士18 2015-04-16
  • 打赏
  • 举报
回复
问题2: 没virtual可以重写,系统会隐藏父类的方法。
圣殿骑士18 2015-04-16
  • 打赏
  • 举报
回复
你这个书上讲的不准确。 假如你在父类上定义一个无参的构造函数,那么它会被子类直接继承。 如果你在父类定义一个带参数的构造函数,那么它不会被子类继承。 子类调用父类的带参数的构造函数,必须用:base(arg)方式来调用。这就是所谓类的初始化构造器的原理
wlpgam 2015-04-16
  • 打赏
  • 举报
回复
问题1中, 如果加的上private, 不要说构造方法和析构方法,就连其它字段和属性在子类中都无被访问。. 如果加上protected,子类是可以访父类的成员的。 当子类在实例化对象的时候,会先调用父类的构造方法,再调用自身的构造方法, 这与书上说的那句话很矛盾(子类会自动拥有父类除了构造方法和析构方法以外的所有成员) 问题2中, sealed 可以修饰类,表不能被继承,也可以修饰方法,表不可以被重写。 当用new的时候,虽然方法名相同,但子类会执行自己的方法,不管父类的方法,但这不是重写父类方法,是隐藏父类的方法。
  • 打赏
  • 举报
回复
第一个如果加上级别是Protected及以上的,可以认为对的 第二个virtual意思就是设计时就预料到子类可以修改,如果没预料到,在某个子类又想重写的话,用new,这时候new 与virtual的区别自行了解(他们是不一样的),至于sealed,这是说我这个类是封装类,不允许再继承该类了
本拉灯 2015-04-16
  • 打赏
  • 举报
回复
Liekkas 2015-04-16
  • 打赏
  • 举报
回复
1、假如子类自动拥有父类的构造方法和析构方法,你想想申明对象的时候会出现什么问题 2、sealed表示此类不能被继承,重写跟你这个有什么关系吗,完全是两码事

111,125

社区成员

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

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

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