C#接口、抽象类、抽象方法和虚方法的区别是什么
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,C#接口、抽象类、抽象方法和虚方法的区别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C#抽象类和接口孩子间在对于抽象类定义的支持
千家信息网最后更新 2026年11月01日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安全错误
数据库的锁怎样保障安全
保险科技 互联网保险
南京欣网互联网络科技有限公司
广州淘业互联网络科技
科技互联网政务服务
九亚互联网科技
广州凡科互联网科技
猫创互联网科技
互联网科技公司名称
丰台科技园 互联网公司
创业天下互联网科技有限公司
未来五年的互联网科技
互联网科技的全部知识
互联网在线教育科技创业
互联网企业科技类企业如何做账
互联网科技快讯热点
下一代互联网重大应用科技园
互联网科技机房
互联网科技新闻
深圳互联网科技园地址
利用互联网等科技手段
互联网科技金融
天下捷融互联网科技
广西互联网科技孵化中心
中国科技创新与世界互联网大会
互联网数据科技专业
互联网科技数字货币
本届互联网大会上的黑科技
杭州融税互联网科技有限公司
亚光科技低轨卫星互联网
互联网 科技节活动 微视频大赛