根据不同的语法和可以使用的地方,它们看起来都非常密切。主要区别是什么?抽象和虚拟相同的含义?
2
A
回答
7
抽象意味着派生类被迫实现它,而虚拟这不是这种情况(它可以但不是必需的)。这源于这样一个事实,即一个抽象方法在虚拟方法中没有关联主体。
0
通过将成员定义为抽象,您正在定义一种占位符,而不提供任何默认实现。任何与基类交互的客户端代码仍然可以引用抽象占位符成员,在知道实例的具体类必须提供具体实现的情况下是安全的。
通过将成员定义为虚拟,可以启用派生类来提供一个将覆盖基类的实现。区别在于,如果派生类不提供自己的实现,则将使用基类中的实现。
考虑下面的C#示例类:
abstract class TaskBase {
public abstract void RunTask();
}
class RoadNetwork {
public string GetCorrectSideToDriveOn() { return "left"; }
}
的TaskBase
类的设计迫使派生类中提供自己的执行RunTask()
因为代码不会没有它编译。设计师有效地说:“任务必须可以运行,但您必须提供实施,因为没有有意义的默认设置。”
的RoadNetwork
类的设计原理不同:人谁实现了RoadNetwork
会自动使用道路的正确一边开车,除非他们专门选择开车在错误的一边;)
相关问题
- 1. 在SystemVerilog中,虚拟类是否与抽象类相同?
- 2. C#虚拟/抽象领域#
- 3. 抽象和虚拟有什么区别?
- 4. Moq,抽象类和虚拟属性
- 5. 类既抽象和虚拟方法
- 6. 虚拟类中的抽象方法
- 7. 泄漏抽象的含义?
- 8. C++,变量,抽象/虚拟类
- 9. 抽象方法声明 - 虚拟?
- 10. C#虚拟(或抽象)静态方法
- 11. 抽象和虚函数
- 12. 非虚拟的非抽象方法导致“c#虚拟或抽象成员不能私有”
- 13. 抽象类:无效的抽象的返回类型为成员函数“虚拟...”
- 14. 命名约定非虚拟和抽象方法
- 15. C++ - 抽象类和替代虚拟构造
- 16. 如何测试在一个抽象类定义的虚拟方法?
- 17. 订购虚拟的,抽象的,覆盖关键字
- 18. 纯虚功能和抽象类
- 19. 如何使用Moq模拟包含内部抽象方法的抽象类?
- 20. 虚拟同步
- 21. 接口,抽象,或只是虚拟的方法?
- 22. 重写一个虚拟的抽象函数?
- 23. 在C#中,每个抽象函数都是虚拟的吗?
- 24. 多个Web应用程序 - 相同的虚拟机vs多个虚拟机
- 25. boost ::序列化与不可变的抽象基础和虚拟继承
- 26. 相同的ASP.NET虚拟目录,不同的行为,为什么?
- 27. Java虚拟对象
- 28. 它是一个抽象类还是纯虚拟(接口)?
- 29. 为什么我们需要抽象类而不是虚拟类?
- 30. C# - 为什么虚拟函数不能覆盖抽象函数?
你可以作为去至于说抽象方法也是一种(特殊的)虚拟方法。 – GolezTrol 2011-01-06 09:50:10