初学者问题:声明父类的成员函数为virtual(虚方法)与不声明有何区别,因为子类中不用override照样能达到重写的目的。

ddmor 2003-09-28 09:23:30
方式一:
class BaseClass
{
public virtual sub()
{}
}
class CA:BaseClass
{
public override sub()//重写
{}
}

方式二:
class BaseClass
{
public sub()
{}
}
class CA:BaseClass
{
public sub()//重写
{}
}

发觉不用virtual和override关键字照样能重写方法,感觉两种方式没什么不同。
...全文
250 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
HanJingJingHan 2003-09-28
  • 打赏
  • 举报
回复
virtual 和 override的含义分别是什么?

先看看面向对象书里面的讲解,而不要一下子钻到很具体的语言中。
Soking 2003-09-28
  • 打赏
  • 举报
回复
方法2里面就不能调用基类的方法,并且编译器会给出警告,说方法二完全覆盖方法一
diaopeng 2003-09-28
  • 打赏
  • 举报
回复
用virtual可以实现运行时绑定,如果不用则是编译时绑定。前者可以提高代码的重用率
herofyf 2003-09-28
  • 打赏
  • 举报
回复
前一个是与变量内容有关,后一种是与变量的值有关,是多态的一种表现!!
ddmor 2003-09-28
  • 打赏
  • 举报
回复
有道理。
ddy2000 2003-09-28
  • 打赏
  • 举报
回复
区别在于有virtual和override的可以保持继承关系
父类中可以写一些通用的东西,子类可以使用
方式一:
class BaseClass
{
public virtual sub()
{
……父类共有处理
}
}
class CA:BaseClass
{
public override sub()//重写
{
……一些子类特有处理
base.sub();
}
}

方式二:
子类和父类的方法各自独立
bobit 2003-09-28
  • 打赏
  • 举报
回复
那么你用两种方式分别定义一个BaseClass的引用,引用一个CA的对象,再调用sub()方法:
BaseClass baseObj = new CA();
baseObj.sub();

方式一将调用CA.sub();
方式而调用 BaseClass.sub();

不过这只是我个人的理解。

110,499

社区成员

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

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

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