当前位置:  开发笔记 > 编程语言 > 正文

C#Struct使用技巧?

如何解决《C#Struct使用技巧?》经验,为你挑选了2个好方法。

我喜欢使用结构.

因此,在阅读本文后,我是否应该反对使用它们?

也可以看看:

我什么时候应该使用结构而不是类?

何时在C#中使用struct?

Jon Skeet.. 11

我几乎从不定义自定义结构.IMO周围没有那么多自然价值类型.

特别是,在定义一个可变结构之前,我会非常仔细地考虑,特别是如果它通过接口实现变异.可变结构的行为方式是人们根本没想到的,导致代码难以理解.

我认为值得阅读" 开发类库的设计指南"中的" 在类和结构之间进行选择".

特别是:

除非类型具有以下所有特征,否则不要定义结构:

它逻辑上表示单个值,类似于基本类型(整数,双精度等).

它的实例大小小于16个字节.

这是不可改变的.

它不必经常装箱.

你真的经常开发具有所有这些特征的类型吗?



1> Jon Skeet..:

我几乎从不定义自定义结构.IMO周围没有那么多自然价值类型.

特别是,在定义一个可变结构之前,我会非常仔细地考虑,特别是如果它通过接口实现变异.可变结构的行为方式是人们根本没想到的,导致代码难以理解.

我认为值得阅读" 开发类库的设计指南"中的" 在类和结构之间进行选择".

特别是:

除非类型具有以下所有特征,否则不要定义结构:

它逻辑上表示单个值,类似于基本类型(整数,双精度等).

它的实例大小小于16个字节.

这是不可改变的.

它不必经常装箱.

你真的经常开发具有所有这些特征的类型吗?



2> Michael Dama..:

您应该对结构进行以下考虑:

结构应该是不可变的(可变结构不直观且不可预测)

结构总是有一个无法更改的默认(公共无参数)构造函数

struct size不应超过16个字节

EqualsGetHashCode方法应该重写以提高性能

IEquatable建议实现该接口

重新定义和==!=还建议运营商


将大小限制为16个字节的原因是什么?
可变结构:考虑以下multable`struct Point {public int X,public int Y}`.当它在集合中使用时(例如`List `),迭代和修改它不会更新集合中的值:`foreach(点数/*点中的var p是Point []*/){pX = 3} `,因为从集合中获取一个元素只会给你一个元素的*副本*(或克隆).对于将struct值作为方法参数传递,这同样有效.
推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有