C#基础知识:virtual方法,abstract方法,区别

virtual 关键字用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。默认情况下,类中的方法是非虚的,非虚的方法不能在子类中被覆盖(override),但是可以隐藏(new),但这不影响父类方法的功能。为了达到子类以自己的方法实现某一功能的目的,需要在父类中用virtual关键字来修饰方法,这样,在其继承子类中就可以采用覆盖的方法来提供方法的多态机制。virtual关键字在类中修饰方法需要注意以下几点:

1. virtual修饰类中方法时,前面必须有public修饰符,非虚方法不能是有;

2. virtual不可以与static、abstract、private、override一起使用;但virtual和override密不可分,要在子类中覆盖基类的虚方法,就必须要用到override覆盖,以子类方法实现某一功能;

3. virtual修饰的方法必须有实现,即使该实现是一个空方法体;

4. 基类中的virtual方法可以选择在继承子类中覆盖或不覆盖,这样就存在两种情况:

(1)若基类中定义的virtual方法在派生类中被覆盖(override),那么在对派生类实例的调用中,该方法使用的是派生类中的新方法(该新方法是在子类中通过覆盖父类中的虚方法而重新定义的方法);

(2)若在基类中定义的virtual方法在派生类中没有被覆盖(override),那么在对派生类实例的调用中,该方法使用的是基类中定义的方法。

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

时间: 2024-08-05 19:36:56

C#基础知识:virtual方法,abstract方法,区别的相关文章

asp.net中virtual和abstract的区别分析

这篇文章主要介绍了asp.net中virtual和abstract的区别,较为详细的分析了virtual与abstract的概念与具体用法,并以实例的形式予以总结归纳,需要的朋友可以参考下 本文实例分析了asp.net中virtual和abstract的区别,分享给大家供大家参考.具体分析如下: 一.Virtual方法(虚方法) virtual 关键字用于在基类中修饰方法.virtual的使用会有两种情况:情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法.那么在对派生类实例

asp.net中virtual和abstract的区别

一.Virtual方法(虚方法) virtual 关键字用于在基类中修饰方法.virtual的使用会有两种情况:情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法.那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法.情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法.那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法. 当一个方法被声明为Virtual时,它是一个虚拟方法,直到你使用ClassName variable =

C#中interface、virtual和abstract方法的区别

Abstract: abstract方法必须在abstarct类中声明,没有默认实现,子类必须实现. Virtual: virtual方法可以声明在abstract类中,也可以声明在非abstarct类中,并且可以有默认实现. Interface: 最重要的就是类可以继承自多个Interface.

virtual和abstract的区别和联系

壹. 相同 他们有些相似.有些场景用哪个都行! 1. 修饰父类.让子类重写 virtual和abstract都是用来修饰父类的,通过覆盖父类的定义,让子类重新定义. 2. 都用必须public 如果用来修饰方法,前面必须添加public,要不然就会出现编译错误:虚拟方法或抽象方法是不能私有的.毕竟加上virtual或abstract  就是让子类重新定义的,而private成员是不能被子类访问的. 贰. 区别 但是它们的区别很大.(virtual是"虚拟的",abstract是&quo

virtual和abstract的区别

virtual和abstract都是用来修饰父类的,通过覆盖父类的定义,让子类重新定义. 它们有一个共同点:如果用来修饰方法,前面必须添加public,要不然就会出现编译错误:虚拟方法或抽象方法是不能私有的.毕竟加上virtual或abstract就是让子类重新定义的,而private成员是不能被子类访问的. 但是它们的区别很大.(virtual是“虚拟的”,abstract是“抽象的"). (1)virtual修饰的方法必须有实现(哪怕是仅仅添加一对大括号),而abstract修饰的方法一定不

【转】C#中virtual和abstract的区别

看到一边文章中有诸多不严谨之处,转载并加以修改. C++: C++中,由virtual实现多态.除多态外,virtual有两个特殊用法: 1.虚基类(Virtual base class) 为解决多重继承时的二义性提出来的.使用方法: class B :virtual public A class C :virtual public A class D: public B, public C Abstract class 2.纯虚函数 含有纯虚函数的类叫做抽象类.纯虚函数如下: void vir

C#中virtual和abstract的区别

virtual和abstract都是用来修饰父类的,通过覆盖父类的定义,让子类重新定义. 它们有一个共同点:如果用来修饰方法,前面必须添加public,要不然就会出现编译错误:虚拟方法或抽象方法是不能私有的.毕竟加上virtual或abstract就是让子类重新定义的,而private成员是不能被子类访问的. 但是它们的区别很大.(virtual是“虚拟的”,abstract是“抽象的"). (1)virtual修饰的方法必须有实现(哪怕是仅仅添加一对大括号),而abstract修饰的方法一定不

.NET virtual和abstract的区别和联系

1. 相同他们有些相似.有些场景用哪个都行!1. 修饰父类.让子类重写virtual和abstract都是用来修饰父类的,通过覆盖父类的定义,让子类重新定义. 2. 都用必须public如果用来修饰方法,前面必须添加public,要不然就会出现编译错误:虚拟方法或抽象方法是不能私有的.毕竟加上virtual或abstract 就是让子类重新定义的,而private成员是不能被子类访问的. 2. 区别但是它们的区别很大.(virtual是“虚拟的”,abstract是“抽象的”).1. 必须实现.

Virtual 和 Abstract的区别

二者都是用来修饰基类的,通过覆盖基类的定义,让派生类重新定义. 相同点:如果用于修饰方法,必须声明为Public(公有的)或者Protected(受保护的),因为派生类是不能访问Private(私有)方法的. 不同点: Virtual:虚拟的,1基类中Virtual修饰的方法必须有实现,即便是只有一个大括号.2.派生类中Virtual可以被重写,也可以不被重写.在派生类中,要实现该修饰的方法的时候,  必须使用关键字Override(告诉编译器,需要重写虚方法),必须有实现.3.C#中如果要在派

Form表单基础知识和常用兼容方法笔记(二)

接到上一节讲文本框脚本 过滤输入(屏蔽字符和操作剪贴板) 在此之前需要用到两个兼容的方方法 var ev={ //添加事件监听 addEvent:function(obj,evt,fun){ if(obj.addEventListener){//for dom obj.addEventListener(evt,fun,false) } else if(obj.attachEvent){//for ie obj.attachEvent("on"+evt,fun) //obj.attach