C# 抽象方法和虚方法的区别

一、抽象方法:只在抽象类中定义,方法修饰符不能使用private,virtual,static.

  (1)象方法只能声明在抽象类中,使用关键字abstract

  (2)抽象类中的抽象方法必须被子类重写。

【抽象方法没有方法体,子类必须重写方法体!!,因此抽象方法可以看成是一个没有方法体的虚方法】

二、虚方法:使用virtual修饰的方法:

  虚方法可以有方法体。

  

  注意事项:virtual修饰符不能与private、static、abstract、override修饰符同时使用。

  ps:override修饰符不能与new 、static、virtual修饰符同时使用,并且重写方法只能用于重写基类中的虚方法。

  虚函数的限制:

  * 虚函数仅适用于有继承关系的类对象,所以只有类的成员函数才能说明为虚函数;

  *静态成员函数、内联函数、构造函数不能是虚函数;

  *析构函数可以是虚函数。

三、两者区别:

  总结:抽象方法是只有方法名称,没有方法体(也就是没有方法具体实现),子类必须重写父类抽象方法;

  虚函数是该方法有方法体,但是子类可以覆盖,也可不覆盖。

  (1)虚方法有方法体,抽象方法没有方法体。抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化;

  (2)抽象方法只能在抽象类中声明,虚方法不是;

  (3)派生类必须重写抽象类中的抽象方法,虚方法则不必要。

原文地址:https://www.cnblogs.com/zcwfb/p/10967162.html

时间: 2024-10-11 14:21:43

C# 抽象方法和虚方法的区别的相关文章

OO 抽象方法与虚方法的区别

 抽象方法与虚方法的区别 抽象方法与虚方法的区别: 一.抽象方法: 1.只能在抽象类中定义: 2.不能有方法的实现:(方法体)[因为抽象类无法实例化,所以抽象方法没有办法被调用,也就是说抽象方法永远不可能被实现.] 3.被子类继承后,必须重写: 4.使用关键字abstract修饰: 二.虚方法: 1.可以在抽象类和普通类中定义: 2.可以有方法的实现(方法体,即使空的也要声明) 3.被子类继承后,可以重写也也可以不重写: 4.使用关键字virtrual修饰:

浅谈接口、抽象类、抽象方法和虚方法的区别

C#抽象类和接口孩子间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于抽象类和接口的选择显得比较随意.其实,两者之间还是有很大区别的. 首先说一下接口与抽象类的异同: 相同点: 1.他们都不能实例化自己,也就是说都是用来被继承的. 2.抽象类中的抽象方法和接口方法一样,都不能有方法体 不同点: 1.抽象类里可以有字段,接口中不能有字段. 2.抽象类中的普通方法可以有方法体,而接口方法没有方法体. 3.接口中的方法不能有访问修饰符,抽象类中的抽象方

C#中抽象方法与虚方法的区别

一.抽象方法:只在抽象类中定义,方法修饰符不能使用private,virtual,static. 抽象方法如下示: public abstract class People   //声明一个抽象类 { public abstract void study();  //抽象方法只能定义在抽象类中. } public class Student:People   //继承抽象类 { public  override void study()     //重写抽象类的抽象方法 { Console.Wr

抽象方法和虚方法的区别

1.抽象类关键字 abstract 2.抽象类不能实例化 3.抽象方法没有方法体 4.子类实现抽象方法的快捷键 Ctrl+.+Enter 5.一个类如果继承抽象类,那么重写重写类中的所有方法 7.抽象类不能是静态类和密封类 8.抽象类方法只能存在于抽象类中 9.抽象类中抽象方法只是用来规定子类方法的形式(参数,返回值)约束子类方法的形式

对抽象类和虚方法的区别

抽象类定义:它的作用就是产生子类的同时给于子类一些特定的属性和方法.abstract修饰符可以和类.方法.属性.索引器及事件一起使用.在类声明中使用abstract修饰符以指示某个类只能是其他类的父类.标记为抽象或包含在抽象类中的成员必须通过从抽象类的子类来实现. 特性:1.抽象类不能被实例化:2.抽象类可以包含抽象方法和抽象访问器:3.不能用sealed修饰符修饰:4.从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实现. 总结:~抽象方法是隐式的虚方法:~只容许在抽象类中使用抽

虚方法的重写与普通方法的隐藏的区别;抽象方法和虚方法有什么区别?

两者都可实现对基类方法的重写 ,虚方法在基类中virtual ,在派生类用override关键字修饰,而普通方法的隐藏在基类不用什么修饰符,而在派生类中用new关键字进行重写 ,我想问,它们同样是方法的重写, c#为什么会有两种方法重写方法,这样设计不是重复了呢, 这怎么理解呢? 不重复,首先如果基类里面的virtual方法被子类继承之后,用override重写之后,那么子类里面就只有一个该方法名的方法了.而另一个普通的,就是在子类里面直接通过new 来新建一个方法那叫重载(多态分为重写和重载)

抽象方法和虚方法 与设计模式

一.概念 抽象方法和虚方法是什么?先写一段代码看看他们俩的区别. 抽象方法使用abstract关键字:虚方法使用virtaul关键字. <span style="font-size:18px;">//抽象方法 Public abstract class TestPaper { Public abstract Answer(): } </span> <span style="font-size:18px;">//虚方法 Public

C#中抽象方法与虚拟方法的区别

学过C#的人应该都知道抽象方法与虚拟方法,而很多初学者对二者之间的区别并不是很了解.今天本文就来分析一下二者之间的区别.并附上实例加以说明.具体分析如下: 一.主要区别: 对于抽象方法,子类必须实现它 . 对于虚拟方法,子类可以重写也可以不重写 . 因此, 两者约束不同 二.实例代码如下: /* 声明一个抽象类 * 1.抽象类中可以包含变量 * 2.抽象方法中无法声明方法体 */ abstract class AbsClass { string name; public abstract voi

抽象方法与虚方法

一.虚方法和抽象方法的区别: 1.虚方法必须有实现,抽象方法必须没有实现 2.抽象方法必须在抽象类中声明,虚方法可以出现在抽象类中 3.抽象方法必须在子类中重写,虚方法可以被重写 4.虚方法可以在普通类中.抽象方法必须在抽象类中. 二.什么时候用虚方法?什么时候用抽象方法? 2.1.什么时候用虚方法: 1.父类本身需要被实例化 2.这个方法在父类中有实现的必要(有意义)(方法有默认的实现.) 2.2.什么时候用抽象方法: 1.在当前系统中,父类绝对不会被实例化.Person p=new Pers