美文网首页
类和结构体-我忽略的小细节

类和结构体-我忽略的小细节

作者: 地坛公园 | 来源:发表于2018-09-22 13:31 被阅读0次

最近不知怎么,偶尔想起了结构体struct,就我个人而言,已经很久没有在项目中使用过结构体了

有很长时间没有使用过C++了,但我还清晰的记得当时书上的一句话,C++中,类和结构体的唯一区别就是
默认的访问级别不同。

C++的默认访问级别是private的,只要你没有显式声明,字段或方法就是private
而struct的默认访问级别是public的

区别就在这里,其它使用上,继承接口,类,派生,虚函数,抽像等等都是一样的。(模板参数除外)

即便是这样,我基本上也很少使用struct.

在C#当中,struct变成了值类型。这让我一度以为struct变得很鸡肋,除了值类型以外,C#中的struct还是
sealed密封的,他不可以被派生(通过派生int,float,double这些类型来创建新的类型是不允许的),那么private,protected这些访问修饰符也变得没有意义。

即然struct是值类型,他只会在栈上分配空间,不会在堆上分配(除非结构是一个引用成员的字段)

但实际上,struct的应用无处不在。

首先,结构要比类的创建开销小。在某些情况下,使用结构来替代类可以提高性能。在哪些地方使用结构呢?

结构通常可以用于表示一些“纯数据”的类,比如我定义了x,y两个坐标,那么就是我们常用的Point类,实际上
是一个struct的实现,类似的,Size,Rect都是结构的实现,成义成结构以后,就可以进行重用,而且开销
要比类小。

这种情况很常见,我们总会在类中定义很多相关的值类型字段,如果要在多个地方重用,
我就可以定义成struct来重用,而且还有一个好处,因为结构是值类型,所以对象拷贝的时候,你不需要考虑深拷贝的情况。

再深一步的了解,在C#.Net当中,基元类型:Int,short,long,double这些都是struct实现的。

那么相应的,Unity中我们使用的Vector2,Vector3向量,也都是struct实现的。

而且在使用struct时,也要通过new进行创建,也可以不使用new创建,但在使用之前,必须要先进行赋值。

如下截图:

image.png image.png image.png
最后总结下C#中,结构的特点:
1.struct是值类型,内存开销比类小
2.struct是密封的,无法被派生,但是他可以继承其它类和接口,所有结构都派生自System.ValueType

应用场景:

表示”纯数据类“时,使用结构代替类,内存开销更小,更合适,确切说,相关值类型的集合,比如Point,Size,Vector2,Vector3等等

说罢,想起了这段时间帮朋友做的一个模块中有struct可以应用的场景,现在就去重构下。


image.png

偶像镇楼!

相关文章

  • 类和结构体-我忽略的小细节

    最近不知怎么,偶尔想起了结构体struct,就我个人而言,已经很久没有在项目中使用过结构体了 有很长时间没有使用过...

  • 类和结构体

    类与结构体 本节内容包括: 类和结构体对比 结构体和枚举是值类型 类是引用类型 类和结构体的选择 集合类型的赋值与...

  • swift基础_结构体和类

    一.结构体和类 结构体张这个样子 类张这个样子 二.结构体和类的区别 针对结构体, 即使你没有定义函数,编译器也会...

  • Swift Tour Learn (六) -- Swift 语法

    Swift语法基础(五)-- (类和结构体、属性、方法) 本章将会介绍 类和结构体对比结构体和枚举是值类型类是引用...

  • Day9 类和结构体

    本页包含内容:• 类和结构体对比• 结构体和枚举是值类型• 类是引用类型• 类和结构体的选择• 字符串、数组、和字...

  • swift面向对象特性——类和结构体

    类和结构体的定义 类的语法格式为: 结构体的语法格式为: Swift中类和结构体的名称都以大写字母开头。类的方法和...

  • Swift学习_基本语法之枚举&类&结构体

    1.枚举 类和结构体 在swift中类和结构体类似,可以把结构体理解成是一种轻量级的类,在swift中结构体不仅可...

  • Swift5.1类和结构体

    9.类和结构体 结构体和类相比Swift中结构体和类的共同点:- 定义属性⽤于存储值- 定义方法⽤于提供功能- 定...

  • Swift5.x-属性(中文文档)

    引言 继续学习Swift文档,从上一章节:结构体和类,我们学习了Swift结构体和类相关的内容,如结构体和类的定义...

  • Swift笔记<十五>结构体和类的区别

    结构体和类的区别 结构体有逐一构造器,类没有 结构体是值类型,类是引用类型 结构体不是继承(意味着没有多态)

网友评论

      本文标题:类和结构体-我忽略的小细节

      本文链接:https://www.haomeiwen.com/subject/ouatoftx.html