C#接口、抽象类、抽象方法和虚方法的区别是什么
发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,C#接口、抽象类、抽象方法和虚方法的区别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C#抽象类和接口孩子间在对于抽象类定义的支持
千家信息网最后更新 2024年11月26日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安全错误
数据库的锁怎样保障安全
服务器没网线
泾阳县软件开发
mysql数据库被锁怎么办
公安网络安全保卫局的职责
从数据库的同步对读的影响
首都网络安全日直播
wifi接不到服务器
数据库sql语句查询非离职员工
解压显示服务器繁忙
非你莫属老板网络安全工程师
垫江县永成互联网科技有限公司
服务器文件共享备份
王牌战争购买服务器能玩永久吗
军队网络安全 检查
cf转服务器需要多少钱
java网络安全的前景
小米账号云服务器地址
辽宁省视频会议服务器虚拟主机
网络技术基础代谢1300
规范网络安全公众号分级
自己编写网络安全工具
高中网络技术应用 课件
从数据库的同步对读的影响
无线智能与网络技术
嵌入式单片机软件开发工程师求职
生活中网络安全的现象
数据库技术 矩阵 性能
福建软件开发代理商推荐货源
nba总数据库
数据库有几张表论文就要写几张吗