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

首先是结构体与类:

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

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

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

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

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

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

随后是抽象类与接口:

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

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

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

相关推荐
重生之小比特4 分钟前
【C++进阶】红黑树的实现
java·开发语言·c++
纪念 2295 分钟前
C++算法(一)
开发语言·c++·算法
Yunovian2 小时前
AI时代,针对模型与应用,浅谈一下各编程语言
开发语言·c++·人工智能·python·ai·rust·ai编程
Behavior2 小时前
Unity 手游动态更换 App 图标 — Android 与 iOS 双端技术方案
c#·unity3d·游戏开发
周杰伦fans3 小时前
构建真正智能的CAD AI绘图代理
开发语言·人工智能·c#
zhanghaha13145 小时前
Python进阶教程:35_PyQt (保姆级零基础教程)
开发语言·python·pyqt
释厄6235 小时前
多黑洞具现论·物理/生物/金融三域显化·虚拟宇宙黑洞·奇点=0 圆圈
开发语言·数据结构·人工智能·程序人生·安全威胁分析
UIU1146 小时前
递归算法与汉诺塔
c++·学习·算法·c#·递归
Fruit_Caller6 小时前
static
开发语言·c++
CSharp精选营12 小时前
我用 ASP.NET Core 做了个水稻病虫害检查系统
c#·毕业设计·.net core·码农刚子