千家信息网

C#接口、抽象类、抽象方法和虚方法的区别是什么

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,C#接口、抽象类、抽象方法和虚方法的区别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C#抽象类和接口孩子间在对于抽象类定义的支持
千家信息网最后更新 2026年10月31日C#接口、抽象类、抽象方法和虚方法的区别是什么

C#接口、抽象类、抽象方法和虚方法的区别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

C#抽象类和接口孩子间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于抽象类和接口的选择显得比较随意。其实,两者之间还是有很大区别的。

首先说一下接口与抽象类的异同:

相同点:

1.他们都不能实例化自己,也就是说都是用来被继承的。

2.抽象类中的抽象方法和接口方法一样,都不能有方法体

不同点:

1.抽象类里可以有字段,接口中不能有字段.

2.抽象类中的普通方法可以有方法体,而接口方法没有方法体。

3.接口中的方法不能有访问修饰符,抽象类中的抽象方法被继承,需要override重写 .

4.接口更像是一种规范,一种约束。

5.一个子类只能继承一个抽象类,但却可以继承多个接口。

接下来是抽象方法和虚方法的异同:

其实可以把抽象方法看做是没有方法体的虚方法。

相同点:

1.抽象方法和虚方法都可以被重写。

不同点:

1.abstract 和virtual的关键字不同

2.抽象方法一定没有方法体,而虚方法可以有方法体。

下面写个例子说明一下:

///   /// 一个手机的抽象类  ///   public abstract class Mobilephone   {  private string _logo;  public string Logo  {  get { return _logo; }  set { _logo = value; }  }  public abstract void Call();  public virtual void Callagain()   {  Console.WriteLine("我再打一个电话");  }  }  ///   /// 定义一个实体类,继承了一个抽象类及多个接口  ///   public class Nokia :Mobilephone,IClock,Ilistenmusic  {  public override void Call()  {  Console.WriteLine("NOKIA打电话没问题");  }  public void clock()  {  Console.WriteLine("NOKIA的手机也有闹钟功能");  }  public void listenmusic()  {  Console.WriteLine("NOKIA的手机还能听歌");  }  public override void Callagain()   {  Console.WriteLine("算了,还是不打了");  }  }  ///   /// 下面定义了两个接口,为了说明可以继承多个接口  ///   public interface Ilistenmusic   {  void listenmusic();  }  public interface IClock   {  void clock();  }

在补充一个小例子,

这里有到很有意思的面试题,说名了new关键字和override的区别:

class Program   {   static void Main(string[] args)   {   B5 b5 = new B5();   b5.MethodB();   }   }   public class A5   {   public virtual void MethodA()   {   Console.WriteLine("A5.MethodA");   Console.Read();   }   public virtual void MethodB()   {   MethodA();   }   }   public class B5 :A5   {   public new void MethodA()   {   Console.WriteLine("B5.MethodA");   Console.ReadLine();   }   }   class Program  {  static void Main(string[] args)  {  B5 b5 = new B5();  b5.MethodB();  }  }  public class A5  {  public virtual void MethodA()  {  Console.WriteLine("A5.MethodA");  Console.Read();  }  public virtual void MethodB()  {  MethodA();  }  }  public class B5 :A5  {  public new void MethodA()   {  Console.WriteLine("B5.MethodA");  Console.ReadLine();  }  }

最后的答案是:"A5.MethodA"

看完上述内容,你们掌握C#接口、抽象类、抽象方法和虚方法的区别是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

方法 接口 C# 不同 多个 手机 问题 很大 相同 不同点 例子 关键 关键字 内容 字段 异同 更多 相同点 还是 普通 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网为科技 电子科技大学互联网 赫美联合互联网科技 长亮科技互联网金融 科技互联网创业计划书 滨湖区互联网智能科技产品供应 济南华为互联网科技产业总部基地 哈尔滨新华互联网科技学院 互联网科技中介 互联网时代科技改变生活 青海科技产业互联网发展 中国科技创新与世界互联网大会 黑云互联网科技有限公司 美国互联网科技公司 互联网科技融合创新 东营紫格互联网科技 承德科技产业互联网平台 互联网大会出现的黑科技 广州全民伙伴互联网科技有限公司 互联网 科技节活动 微视频大赛 互联网属科技 厦门中拓互联网络科技有限公司 互联网科技集团 苏州大垚互联网科技 左右互联网络科技 伍佰万互联网科技怎么赚钱 有人说阿里系是互联网科技企业 新氧科技和美国互联网有关系吗 中国互联网公司的科技投入 中国主要互联网科技公司
0