学习C#的时候一直困扰结构体与类之间的区别,翻阅资料与博客总结了以下几点: 链接指路: 类与结构体的区别 1. 声明字段赋值问题 结构体声明字段的时候是不可以给初始值的,否则会提示语法错误。 严格意义上讲,类的字段也不能给初始值,只是为字段赋值的代码在C#编译器编译的时候会将赋值的代码放到构造函数中去执行的。
2. 构造函数 在结构体中,隐式的构造函数在结构中总是存在的,因此是不能手动为结构体添加1个无参数的构造函数的,而且,在结构体的构造函数中,必须要为结构体的所有字段赋值。 同时,在结构体的构造函数中为属性赋值不被认为是在对字段赋值,所以我们在构造函数中要直接为字段赋值。
3. 创建对象的方式 创建结构体对象时可以不使用new关键字,但要注意的是要给对象中的字段赋初始值。 当然,创捷结构体也可以像类一样使用new关键字,这个时候的对象里面的字段是已经含有构造函数为字段赋的初始值了。
4. 结构体不能继承,但是可以实现接口 结构体不能从另外1个结构或者类继承,但是可以实现接口。 特殊在于,虽然结构体不能从别的类或者结构继承,但是所有的结构都默认从ValueType类继承,ValueType类再从Object类继承,所以结构体对象仍然拥有超类Object的成员。
5. 结构体是值类型,类是引用类型 结构体是值类型,当其作为1个局部变量的时候,变量是存储在栈空间中的,其对象的字段直接存储在这个变量中的。 与引用类型的类不一样,引用类型的变量中存储的是对象在堆空间中的地址,所以当我们传递1个引用类型的变量的时候,其实传递的是变量的值(对象的地址)传递完以后对变量的修改会影响到另外1个变量指向的对象的值。
6. 使用情况 结构存储在栈中,特点是空间较小,但是访问速度较快,相对的,堆空间较大,但是访问速度相对较慢,所以当我们描述1个轻量级对象的时候,可以将其定义为结构来提高效率。 结构体和类都表示可以包含数据成员和函数成员的数据结构。与类不同的是,结构是值类型并且不需要堆分配。结构类型的变量直接包含结构的数据,而类类型的变量包含对数据的引用(该变量称为对象)。 因此结构更适合表示1个轻量级对象,在变量传值的时候,如果只是传递对象的拷贝而不是对象的引用地址,可以考虑使用结构。