C#虚方法(Virtual)、抽象方法(Abstract),接口(Interface)、抽象类的区别

一、虚方法和抽象方法的区别:

  1、抽象方法只能在抽象类里面声明,而且抽象方法不能有实现(不能有方法体)。

  2、虚方法在声明时必须有实现。

   public abstract class test     {

      /// 在抽象类中声明了抽象方法

      public abstract string AbstractMethod();

     /// 虚方法

      public virtual string VirtualMethod()

       {

          return "this is a Virtual Method in Abstract Class!";

      }

       }

  3、派生的子类中,必须要重写基类的抽象方法,虚方法则不一定要重写。

二、虚方法和抽象方法的相同点:

  1、都可以被派生类重写(overwrite)。

三、两者各自使用场景:

  完全不知道要怎么做的场景,使用抽象方法,知道了一部分怎么做的场景则使用虚方法。

四、抽象类和接口的区别:

  1、抽象类可以定义字段、属性、方法的实现,接口只能声明属性、索引器、事件和方法声明,不能有字段。

  2、接口可以被多重实现,抽象类只能被单一继承。

  3、抽象类是一个不完整的类,需要进一步细化,而接口是一个行为规范。

  4、接口可以用于支持回调,而继承并不具备这个特点。

五、抽象类和接口的相同点:

  1、都可以被继承

  2、都不能实例化

  3、都可以包含方法声明

  4、派生类必须实现未实现的方法

时间: 2024-08-24 22:32:54

C#虚方法(Virtual)、抽象方法(Abstract),接口(Interface)、抽象类的区别的相关文章

大龙的学习笔记之“虚方法,抽象方法,重写,抽象类,接口”

虚方法:可以重写,也可以不重写,英文名:virtual 抽象方法:必须重写,必须放在抽象类中,英文名:abstract 重写:可以重写三种方法:virtual,abstract,override,英文名:override 抽象类:可以有抽象方法,也可以有非抽象方法,英文名:abstract 接口:和抽象类相似,但是里面只有未实现的方法,英文名:interface 大龙的学习笔记之"虚方法,抽象方法,重写,抽象类,接口",布布扣,bubuko.com

虚方法、抽象方法、接口方法

1.virtual方法(虚方法) virtual方法用于在基类中修饰子类,会遇到下面2种情况: 情况1:子类没有重写,则子类调用的是基类的方法. 情况2:子类重写了,则子类调用的重写的方法. 2. abstract方法(抽象方法) 抽象方法只是可以在抽象类中出现,并且没有具体的实现.抽象类必须在派生类中通过override实现.派生类必须全部实现父类的方法,否则派生类也需要定义为抽象类. 3.接口方法 接口方法必须出现在接口中,没有方法的实现,只有方法名称,参数和返回值.派生类必须全部实现父类方

虚方法(virtual)和抽象方法(abstract)的区别

虚方法和抽象方法都可以供派生类重写. 虚方法必须有实现部分,抽象方法必须没有实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化.如: class Program { static void Main(string[] args) { C c = new C(); D d = new D(); } } abstract class A { public virtual void Sleep() { } public virtual void N(); //报错,虚方法必须有实现

[转]虚方法(virtual)和抽象方法(abstract)的区别

虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢? 1. 虚方法必须有实现部分,抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化.如: //抽象方法public abstract class Animal{    public abstract void Sleep();    public abstract void Eat();} //虚方法public class Animal{    public virtual void Sleep(){}

C#类、接口、虚方法和抽象方法

虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢? 1. 虚方法必须有实现部分,并为派生类提供了重写该方法的选项.抽象方法没有提供实现部分,抽象方法是一种强制派生类重写的方法,否则派生类将不能被实例化 2. 抽象方法只能在抽象类中声明, 抽象方法必须在派生类中重写.虚方法不是也不必要重写.其实如果类包含抽象方法,那么该类也是抽象的,也必须声明为抽象的 3. 抽象方法必须在派生类中重写,这一点跟接口类似,虚拟方法不必.抽象方法不能声明方法体,而虚拟方法可以. 包含抽象方法的类不能实例化 ,

总结下抽象类Abstract和虚方法Virtual(易混点)

1.普通类中可以有普通方法和虚方法,在被继承时,虚方法可以选择重写(override)或者不重写 2.抽象类中可以有普通方法和虚方法和抽象方法,当被继承时 如下 1.普通方法不能被子类重写 2.虚方法可以选择被子类重写(override)也可以不被重写 3.抽象方法必须被子类重写(override) 原文地址:https://www.cnblogs.com/lixipeng/p/11173377.html

浅谈C# 多态的魅力(虚方法,抽象,接口实现)

浅谈C# 多态的魅力(虚方法,抽象,接口实现) 分类:             asp.net             C#              2014-02-08 11:29     786人阅读     评论(0)     收藏     举报 浅谈C# 多态的魅力(虚方法,抽象,接口实现) 前言:我们都知道面向对象的三大特性:封装,继承,多态.封装和继承对于初学者而言比较好理解,但要理解多态,尤其是深入理解,初学者往往存在有很多困惑,为什么这样就可以?有时候感觉很不可思议,由此,面向

C# 多态(虚方法,抽象,接口实现)

浅谈C# 多态的魅力(虚方法,抽象,接口实现) 前言:我们都知道面向对象的三大特性:封装,继承,多态.封装和继承对于初学者而言比较好理解,但要理解多态,尤其是深入理解,初学者往往存在有很多困惑,为什么这样就可以?有时候感觉很不可思议,由此,面向对象的魅力体现了出来,那就是多态,多态用的好,可以提高程序的扩展性.常用的设计模式,比如简单工厂设计模式,核心就是多态. 其实多态就是:允许将子类类型的指针赋值给父类类型的指针.也就是同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果.在运行时

虚方法与抽象方法有什么区别

抽象方法是只有定义.没有实际方法体的函数,它只能在抽象函数中出现,并且在子类中必须重写:虚方法则有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖. 重写的子类虚函数就是被覆盖了. 抽象方法 使用abstract关键字 public abstract bool Withdraw(-); 抽象方法是必须被派生类覆写的方法. 抽象方法是可以看成是没有实现体的虚方法 如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法 虚方法 使用virtual关键字 public

虚方法和抽象方法--基础回顾

抽象方法是只有定义.没有实际方法体的函数,它只能在抽象函数中出现,并且在子类中必须重写:虚方法则有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖.重写的子类虚函数就是被覆盖了. 抽象方法 使用abstract关键字 public abstract bool Withdraw(…); 抽象方法是必须被派生类覆写的方法. 抽象方法是可以看成是没有实现体的虚方法 如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法 虚方法 使用virtual关键字 public v