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

首先是结构体与类:

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

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

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

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

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

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

随后是抽象类与接口:

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

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

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

相关推荐
野生技术架构师3 小时前
Multi-agent的新趋势,从Agent Team到Agent Swarm
开发语言·人工智能
Bonnie_12153 小时前
10-深入理解ConcurrentHashMap(JDK1.8)
java·开发语言
宿6744 小时前
vue3-指令和事件处理
开发语言·前端·javascript
mqiqe4 小时前
AgentScope Java Harness:2. 上下文压缩:让长期 Agent 永不“失忆“
java·开发语言
Aurorar0rua4 小时前
CS50 x 2024 Notes Memory - 03
c语言·开发语言·学习方法
爱敲代码的憨仔4 小时前
BM25全文检索
开发语言·python·全文检索
油丶酸萝卜别吃10 小时前
utils.js 说明文档
开发语言·javascript·ecmascript
leisoo809713 小时前
100GBA股股票数据怎么存ClickHouseRedisMySQLJSON完整对比
大数据·linux·服务器·开发语言·python
不会代码的小猴13 小时前
21. 泛型编程上
开发语言·c++·笔记·算法
一只旭宝14 小时前
细讲C加加【9】C++ std::function与std::bind详解|仿函数、绑定器、类成员绑定、占位符、成员偏移指针
开发语言·c++·算法