C#中结构体与类的区别;抽象类与接口的区别

首先是结构体与类:

1.结构体与类的存储空间不同,结构体存储在栈空间内,类则存储在堆空间内,结构体具有封装特性,但不具备类的继承与多态性质。

2.就二者的成员而言,结构体成员无法使用protected修饰的成员,内部的成员变量声明后不允许赋初值,不允许声明无参构造函数和,不允许声明析构函数,不允许声明其他结构体变量来嵌套,而类中均可以。

3.结构体在声明了有参构造函数后,无参构造函数不会被顶掉。结构体的构造函数中必须对成员变量初始化,而类不需要。

4.结构体无法被static修饰。

5.结构体可以继承接口这一行为规范。

6.需要利用继承和多态时,选择类来描述;需要描述的对象时数据集合时,或者希望改变赋值对象而不改变原对象(值类型的特性)时,选择结构体来描述。

随后是抽象类与接口:

1.抽象类与接口的相同点:均可以被继承,均无法被实例化,类在继承二者后都必须实现其中的未实现方法,均遵循里氏替换原则。

2.抽象类与接口的不点:抽象类中允许有构造函数,而接口中不允许;一个类只能继承一个抽象类,但可以继承多个接口;抽象类中包含成员变量,但接口中没有;抽象类中可以声明已实现的成员方法,接口中仅能声明未实现的方法;抽象类可以使用访问修饰符,而接口一般确定且默认为public,不显式写出。

3.表示从抽象对象用接口,表示行为拓展或不同对象的同一行为规范用接口。

相关推荐
统计学小王子4 小时前
数学建模国赛倒计时4天——《统计模型精讲(混合效应模型R语言实现)》
开发语言·数学建模·r语言
知无不研4 小时前
c语言中循环的介绍与简单应用
c语言·开发语言·算法·循环·for·while
郝学胜-神的一滴4 小时前
Qt 高级编程 045:坐标体系深度实战
开发语言·c++·windows·python·qt·程序人生
dsyyyyy11014 小时前
JS复习,难点,易错点总结
开发语言·javascript·ecmascript
唐青枫5 小时前
别把日志、权限写进业务方法:C#.NET 动态代理从原理到实战
c#·.net
“AI国潮设计-小江”6 小时前
Python实战 | SDXL精准控制“普宁英歌舞×星空蛋糕”IP落地,附核心Prompt与商用授权思路
开发语言·人工智能·python·prompt·aigc
fujisheng6617 小时前
Unity UI 生命周期状态机:处理 Covered、异步竞态与事务回滚
c#·unity3d
小刘在重生~7 小时前
Java常用类|String类详解 + BigDecimal精准计算(含面试题)
java·开发语言·python
YYYing.7 小时前
【C++进阶系列 (二)】关于线程堆栈的那些事——函数调用过程
开发语言·c++·函数·线程堆栈
邪修king7 小时前
Re:Linux系统篇(十九):进程篇(八): 进程等待详解:wait/waitpid,僵尸进程到底该如何回收
java·开发语言