C#接口、抽象类、抽象方法和虚方法的区别是什么
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,C#接口、抽象类、抽象方法和虚方法的区别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C#抽象类和接口孩子间在对于抽象类定义的支持
千家信息网最后更新 2025年11月07日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安全错误
数据库的锁怎样保障安全
电脑变成网页服务器
qq服务器可以送人吗
胖服务器架构
工业控制网络技术课后答案第六章
保护维护网络安全
软件开发和反编译是一起的吗
美国十大互联网科技公司
软件开发要有学历吗
5G移动通信网络安全研究
榆树智能网络技术服务诚信经营
加强网络安全的手抄报
南投软件开发
非法集资公司网络技术人员
数据库家庭地址允许空吗
网站与软件开发师
宝可梦剑盾服务器故障
湛江安卓软件开发方案
如何修改网游服务器指令
中原网络安全创新
网络安全行业采访
随着网络安全法的颁布与实施
华为服务器怎么看管理口ip
网络安全主要应包括
网络安全的关键点是什么
安卓专业软件开发
自贡网络安全工程师招聘
软件开发和反编译是一起的吗
ai智能语音视频服务器
家政软件开发系统装
sql数据库中查看表格信息