virtual 与 abstract 区别

在C#的学习中,容易混淆virtual方法和abstract方法的使用,现在来讨论一下二者的区别。二者都牵涉到在派生类中与override的配合使用。

一、Virtual方法(虚方法)

     virtual 关键字用于在基类中修饰方法。virtual的使用会有两种情况:

     情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法。

     情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法。那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法。

二、Abstract方法(抽象方法)

     abstract关键字只能用在抽象类中修饰方法,并且没有具体的实现。抽象方法的实现必须在派生类中使用override关键字来实现。

时间: 2024-09-19 09:05:05

virtual 与 abstract 区别的相关文章

asp.net中virtual和abstract的区别分析_实用技巧

本文实例分析了asp.net中virtual和abstract的区别,分享给大家供大家参考.具体分析如下: 一.Virtual方法(虚方法) virtual 关键字用于在基类中修饰方法.virtual的使用会有两种情况: 情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法.那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法. 情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法.那么在对派生类实例的调用中,该虚方法使用的是派生重写的方

浅谈C#中new、override、virtual关键字的区别

OO思想现在已经在软件开发项目中广泛应用,其中最重要的一个特性就是继承,最近偶简单的学习了下在设计模式中涉及到继承这个特性时,所需要用到的关键字,其中有一些关键点,特地整理出来.     一.New     在C#中,new这个关键字使用频率非常高,主要有3个功能:         a)   作为运算符用来创建一个对象和调用构造函数.     b)   作为修饰符.     c)   用于在泛型声明中约束可能用作类型参数的参数的类型.     在本文中,只具体介绍new作为修饰符的作用,在用作修

c#中override virtual static abstract sealed 的作用

c#中override virtual static abstract sealed 的作用 说明1: 表示静态的关键字 说明此对象在应用中只存在一份 说明2: C# 是面向对象的程序设计语言,每一个函数都属于一个类. 当一个方法被声明为Static时,这个方法是一个静态方法,编译器会在编译时保留这个方法的实现.也就是说,这个方法属于类,但是不属于任何成员,不管这个类的实例是否存在,它们都会存在.就像入口函数Static void Main,因为它是静态函数,所以可以直接被调用. 当一个方法被声

深入理解C#中new、override、virtual关键字的区别_C#教程

OO思想现在已经在软件开发项目中广泛应用,其中最重要的一个特性就是继承,最近偶简单的复习了下在C#中涉及到继承这个特性时,所需要用到的关键字,其中有一些关键点,特地整理出来,方便大家查阅. 一.在C#中,new这个关键字使用频率非常高,主要有3个功能:    a) 作为运算符用来创建一个对象和调用构造函数. b) 作为修饰符. c) 用于在泛型声明中约束可能用作类型参数的参数的类型. 在本文中,只具体介绍new作为修饰符的作用,在用作修饰符时,new关键字可以在派生类中隐藏基类的方法,也就说在使

C++中复制(copy) 和 虚复制(virtual copy) 的 区别

在继承过程中, 需要区分复制(copy)和虚复制(virtual copy); 在派生类转换为基类时, 复制(copy)有可能切掉(sliced down)派生对象的派生部分, 只保留基类部分, 使派生类的虚函数无法使用; 为了避免此情况, 如果传入是对象, 则可以定义虚函数clone, 使派生类继承此虚函数, 再传入容器, 可以重载方法; 另外, 如果传入是实参, 使用shared_ptr<Base>配合make_shared<Derived>添加容器, 也可以进行动态绑定; 再

&amp;quot;file&amp;quot;与&amp;quot;virtual&amp;quot;的区别

在编写ASP程序的时候,通常都会用到<!--#include virtual/file="path/filename"-->把一段相对独立的文件代码嵌套到当前页面中来.在实际的使用中很多人对"file"和"virtual"的使用不太理解,导致页面执行的时候会出现错误.现就该问题作一个简述. 使用"file"的时候,等号后面使用的是相对路径.所谓相对路径,是以当前文件所在的文件夹作为始点,通过路径搜索,得到其它文件(

abstract virtual在C++和C#中的比较

一年多前,我去面试一家印度公司,做C++的,待遇不错.其中一个题目是让我介绍 vitual base class, 我很久没看C++教材了,突然咯噔一下,这是个啥东东,好像很熟悉,但从来没用过,反正想不 起来了.用本山大叔的话说,我啥时给你送过秋波啊,秋波是啥玩意儿?是啊, vitual base class 是 啥玩意儿呢? 回家一翻书,原来如此.现在总结记录一下,"以免你忘记"(<马语者>) virtual关键字在 C++ 和 C#中都能声明 virtual metho

C#多态和重载有什么区别?还有多态有什么用?

问题描述 C#多态和重载有什么区别?还有多态有什么用? C#多态和重载有什么区别?还有多态有什么用? 老师上课讲了还是迷迷糊糊的,有没有大神用一句话概括下. 解决方案 首先要纠正下,你说的多态其实是培训班素质不高的老师自己发明的黑话,说的是函数重写,也就是派生类的函数覆盖基类的函数. 而不是真正面向对象理论中说的多态.多态不是一种语法,它是一种思想,一种编程风格.说的是"多个事物,一种形态",在编程语言中,函数重载.继承.接口.泛型都体现了多态. 解决方案二: 函数重载和函数重写的区别

C#中索引器和数组的区别?

问题描述 字段和属性的异同?Array和ArrayList的区别?Virtual和abstract的区别?高人给详细讲解以下,谢谢! 解决方案 解决方案二:Array在构造之后是固定大小的.ArrayList在构造之后仍然可以变化大小.Virtual表示虚函数,但可以有实现部分.abstract表示纯虚(抽象)函数,只定义了方法的签名,但不能包括实现.只能是这样:abstractfloatarea(); 不但如此,一个定义了abstract的类则所有其它的类也必须定义成abstract的.举例来