C# 语法之类和结构体的区别(个人总结)
2018-03-09 23:06
387 查看
今天面试的时候,遇到的面试官问了我这个问题。当时懵了一下,因为最近家里面的事情太多脑子有点乱,没有说出来。。
下面进入正题吧:
首先第一个区别就是:语法上的区别 类:Class关键字 结构体:struct关键字
第二其实从上面的途中可以看出语法方面的定义是大同小异,基本没啥区别。(类里面的成员结构体都可以定义)Tip:析构函数除外
第三相信大家从第二张图里面就能看出类于结构体的第二个区别:类里面声明变量可以给初始值,而结构体里面声明的变量不可以给初始值。
我们学习过C#的时候就知道在我们创建一个类的时候,没有给这个类声明构造函数。那么编译器在编译代码的时候就会给类里面自动生成一个无参的构造函数。当然无论我们创建了有参还是无参的构造函数,编译器就不会给我们创建的类里面生成构造函数了。
但是我们可以从上图中看出结构体的构造函数中必须给该结构体里面的所有字段赋值,包括构造函数的参数也必须全部赋值。但是类就不一样了。可以不用给字段赋值。。
第四 结构体是值类型,而类是引用类型。结构体是值类型,当其作为1个局部变量的时候,变量是存储在堆栈的空间内的,其对象的字段直接存储在这个变量中的。
第五 说说关于结构体和类的一些实际应用,我们上边都已经说了,结构体是值类型存储在堆栈。我们都知道堆栈的空间小,但是存取速度快。所以我们再写一个轻量级的对象的时候只需要少量的字段,一般都是用结构体来写。而类是引用类型存储在托管堆。托管堆的空间大,随意我们在描写一个重量级的对象的时候一般我们使用的是类。
以上有什么不对的地方请留言指出。
或者联系qq:1147622730
下面进入正题吧:
首先第一个区别就是:语法上的区别 类:Class关键字 结构体:struct关键字
第二其实从上面的途中可以看出语法方面的定义是大同小异,基本没啥区别。(类里面的成员结构体都可以定义)Tip:析构函数除外
第三相信大家从第二张图里面就能看出类于结构体的第二个区别:类里面声明变量可以给初始值,而结构体里面声明的变量不可以给初始值。
我们学习过C#的时候就知道在我们创建一个类的时候,没有给这个类声明构造函数。那么编译器在编译代码的时候就会给类里面自动生成一个无参的构造函数。当然无论我们创建了有参还是无参的构造函数,编译器就不会给我们创建的类里面生成构造函数了。
但是我们可以从上图中看出结构体的构造函数中必须给该结构体里面的所有字段赋值,包括构造函数的参数也必须全部赋值。但是类就不一样了。可以不用给字段赋值。。
第四 结构体是值类型,而类是引用类型。结构体是值类型,当其作为1个局部变量的时候,变量是存储在堆栈的空间内的,其对象的字段直接存储在这个变量中的。
第五 说说关于结构体和类的一些实际应用,我们上边都已经说了,结构体是值类型存储在堆栈。我们都知道堆栈的空间小,但是存取速度快。所以我们再写一个轻量级的对象的时候只需要少量的字段,一般都是用结构体来写。而类是引用类型存储在托管堆。托管堆的空间大,随意我们在描写一个重量级的对象的时候一般我们使用的是类。
以上有什么不对的地方请留言指出。
或者联系qq:1147622730
相关文章推荐
- C# 基础之类与结构体的区别
- C#中new和override的区别个人总结
- c#学习之与c++的语法区别总结
- c++中关于类(class)和结构体(struct)的区别个人总结
- mysql中char,varchar,text区别个人总结
- Markdown的常用语法(个人总结)
- C#学习之类与结构的区别
- C#中堆和栈的区别分析(有待更新总结2)
- VB.NET与C# 语法区别展示
- java与C#语法区别(持续ing)
- C++和C#的语法和功能区别
- C#经典语法总结(三)多态
- 个人对 HashTable 和 Dictionary的区别总结
- C#中的类与结构体的区别
- vb.net与c#的语法区别
- C#中的结构体与类的区别
- J2SE个人总结3-JAVA语法
- VB.NET和C#的语法区别
- 第十六节:语法总结(3)(C#6.0和C#7.0新语法)
- Markdown的常用语法(个人总结)