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

首先是结构体与类:

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

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

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

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

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

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

随后是抽象类与接口:

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

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

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

相关推荐
摇滚侠5 分钟前
Java 中如何表示负数,有符号和无符号的区别,补码的计算规则,char byte short int long 的范围
java·开发语言
weixin_3077791320 分钟前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
爱读书的小胖36 分钟前
Codewars:Rot13(C)解题分析
c语言·开发语言
鸽鸽程序猿40 分钟前
【项目】【在线判题系统】b端题目增删改
开发语言·python
Lhappy嘻嘻1 小时前
读懂 JVM:内存模型、类加载机制、分代回收
java·开发语言·jvm
cpp_w2 小时前
C#基础3- 面向对象中级应用3
后端·c#
weixin_307779132 小时前
C++代码实现MATLAB中的spectralcluster函数功能
开发语言·c++·算法·matlab
鸽鸽程序猿2 小时前
【项目】【在线判题系统】c端:竞赛报名
c语言·开发语言
Wang's Blog2 小时前
Java 项目实战: 交友项目 - 个人资料管理的需求分析与接口设计
java·开发语言·交友
1024奇点2 小时前
【仓颉语言入门 · 第二篇 第 8 课】
开发语言·数据库·ide·mysql·开源