struct的关键字
写法与类相似,
但是只能放值类型变量,
struct是从C语言继承过来的东西,
C语言里面的结构体可以存放变量,不能直接放方法,但是可以存放函数指针,
不过结构体成员中的函数不能访问结构的成员,
所以后来出现了类。
再次提醒
在 C# 中,结构体是值类型数据结构。
✦ 类是引用类型,结构是值类型。
✦ 结构不支持继承。
✦ 结构不能声明默认的构造函数。
另外,
C# 中的结构与传统的 C 或 C++ 中的结构完全不同,
C#结构可带有方法、字段、索引、属性、运算符方法和事件,
这些看起来就是个Class的基本功能了,
但是注意,
Struct是专门对值类型的,它是存放在栈里面,而不是堆。(就像其它值类型一样)
✦ 它不会触发GC垃圾回收。
✦ 它比Class功能少。
应用场景
✦ 新手建议使用Class,只有后期存在性能优化的需求的时候才考虑Struct。
✦ 我们应当避免 定义struct。
除非满足以下任意条件:
① 逻辑上表达了一个单一值,类似基本数据类型(int, double)。
② 实例大小低于16字节。(放心你普遍达不到这种要求)
③ 不可改变。
④ 不会被频繁装箱。
举个例子
你需要定义桌面坐标(x,y),
那么使用结构体是合适的,
比如
public struct Point
{
public int x;
public int y;
}
解释一下为什么说用Struct性能优化
值类型的实例所占的内存=它的字段需要的内存的总和。
CLR会把该类型内的字段大小设置为该字段实际大小的整数倍。
举例:
public struct A
{
byte b; // 1 byte,8 byte
long l; // 8 byte
}
byte只占1个字节,但实际会占8个字节。
long占8个字节,实际也只能占8个字节。
所以struct A实际上占16个字节。(当然你还可以用特殊方法再减少开销)
当你用class的时候的内存开销远大于struct。
class
✦ 需要为 引用 和 对象单独分配内存。
✦ 对象所占内存=其字段所占内存总和+[额外至少8字节管理开销]
✦ 每个对象的引用,还需要额外的4或8字节。(取决于平台是32还是64位)
内置类型
✦ 内置类型又被称为原始类型。
✦ 内置类型分为值类型和引用类型。
✦ 有内置类型就有自定义类型。
✦ 内置类型是直接底层处理器支持的。
扩展阅读: