\

In the cone of light, all is fate

【C#】基础快速回顾

1.装箱和拆箱
装箱是值类型转换成引用类型
拆箱是装箱后的引用类型转换成值类型
有装才有拆,如果一个引用类型不是由值类型装箱而来,则不能拆箱
装箱的过程大致为在堆中分配内存,大小为目标值类型所占空间(还有其他的,不太好记就不写了)->将值类型的值拷贝到分配的内存中->返回地址到栈中
拆箱的过程大致为获得目标的地址->拷贝其他值到栈中
装箱和拆箱都比较消耗性能,特别是是装箱
避免装箱和拆箱可以通过泛型、接口

2.struct和class的不同
struct是值类型所以在栈中,class是引用类型所以在堆中
struct不能被继承,所以成员的访问符不能是protect等继承相关的
struct的成员声明时不能有默认值,因为它是值类型,在栈上分配内存,必须确保所有成员都被显示初始化(值不确定可能会导致错误),所以在new一个struct时,c#强制要求显式初始化所有成员,也可以用有参构造函数去初始化成员,虽然struct也有默认的无参构造函数(声明有参后无参没用了),但不能在其中初始化成员,因为默认的无参构造会将成员变量设为默认值,比int类的变量会设为0,bool类型的变量会设为false,当在struct中定义了任何构造函数,c#都不会为成员变量设默认值
总结:struct主要体现的是封装,不存在继承和多态方面的特性

posted @ 2023-10-26 17:43  Ymrt  阅读(5)  评论(0编辑  收藏  举报