谁帮我通俗的讲讲abstract 和virtual修饰符的用法的区别

dabobonimama 2008-02-20 04:26:06
帮助也看了.总觉得不够清晰,
...全文
210 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
龙宜坡 2008-02-21
  • 打赏
  • 举报
回复
is as
chengqscjh 2008-02-21
  • 打赏
  • 举报
回复
例子比较有意思.1+7楼的很明白了
lake_cx 2008-02-21
  • 打赏
  • 举报
回复
接着上面来

如果说狗是非抽象类,那么它应该有一种通用的方法“叫”,叫声都是“汪”(viertual的有实现)

但楼主家养了只变异的狗,它有另外一种叫法,它叫声是“喵”(override这个方法,用“喵”来实现)
stg609 2008-02-21
  • 打赏
  • 举报
回复
找到一种比较通形象的解释:
哺乳动物的属性是:恒温,会叫
哺乳动物包括:猫,狗...
猫的叫声是喵~
狗的叫声是汪~
那么我们现实中会看见具体的一个哺乳动物,如猫,狗,但是我们不可能单纯的看到一个"哺乳动物".
也就是说我们看到的猫狗是具体后的东西,它们都有哺乳动物的共同属性,但是它们又有各自的叫声.
那么联系类来说,哺乳动物就是抽象类,用抽象类不能直接构造一个实例,因为这样没有意义.抽象类是用来继承的.
而哺乳动物的另一个共同属性是会叫,但是猫的叫声和狗的叫声不同,所以在这个抽象类中不能明确定义一个叫声的方法,因为不知道是哪种动物在叫,所以这时候就需要一个虚方法,在哺乳动物这个抽象类中只是给出一个方法:会叫,但是具体叫声在子类中给出定义.也就是说在子类中通过override重写这个方法.
seamanhy 2008-02-21
  • 打赏
  • 举报
回复
我是来学习的,搞了2年的软件了,貌似从来没有用到了这两个。。。惭愧啊。
zoom3000s 2008-02-20
  • 打赏
  • 举报
回复
在一个类中如果把一个方法声明成虚拟(viertual)方法,它的派生类可以实现(override)这个虚拟方法,也可以不实现。
但是,如果把一个抽象类中的一个方法声明成抽象(abstract)方法,那么它的派生类就必须去实现(override)这个抽象方法。
另外,虚拟(viertual)方法可以有自己的方法体,而抽象(abstract)方法没有自己的方法体。
注意:当一个类中的方法被声明成抽象时,它所在的类也必须被声明称抽象的。所有被声明为抽象的类,都不可以被实例化只能从派生类访问基类。
tanxiaoyuexia 2008-02-20
  • 打赏
  • 举报
回复
abstract 他的主要功能是设置一个 抽象类 ,一个类的方法使用了这个方法,那他的类也必须定义为 abstract
定义了 , abstract 的方法必须覆盖.而viertual不用.

一个方法使用了viertual 说明 这个方法可以被覆盖,不过他是可选的

  • 打赏
  • 举报
回复
有些是要自己体会的,工作或学习中接触的多了,慢慢也就理解了
mondlee 2008-02-20
  • 打赏
  • 举报
回复
UP!
stg609 2008-02-20
  • 打赏
  • 举报
回复
关注!
zhaoguoqingluntan 2008-02-20
  • 打赏
  • 举报
回复
abstract 可以用在类,方法上,这个和接口有点相似,是对对像的抽像。
而 viertual只可以在方法上。而这是子类中可以重写这个方法。
个人理解
tianke3477 2008-02-20
  • 打赏
  • 举报
回复
(转载)

抽象方法
使用abstract关键字 public abstract bool Withdraw(…);
抽象方法是必须被派生类覆写的方法。
抽象方法是可以看成是没有实现体的虚方法
如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法

虚方法
使用virtual关键字 public virtual bool Withdraw(…);
调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法。
虚方法可以有实现体


110,534

社区成员

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

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

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