我正在构建一个应用程序,我需要在图表中处理一个位置.该位置具有X,Y的值以及北,东,南和纬的方向.我认为这个位置可能是Struct因为它代表该图中的单个值.
我研究并思考Structs并发现这些规则使用Struct:
这是我未完成的一个例子Struct:
public struct Position
{
public long PositionX { get; set; }
public long PositionY { get; set; }
public CompassPoint CompassPoint { get; set; }
}
public enum CompassPoint : byte
{
North,
East,
South,
West
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何计算我的字节大小Struct以及如何知道它是否是不可变的?
谢谢.
更新:
好的.根据响应,似乎我Struct传递了16个字节,因为只有两个long有16个字节+ 1个字节CompassPoint.
但是一个额外的问题是:我获得的是使用Struct16字节和不可变的?看看DateTime Struct,它似乎有16个字节?任何问题?
大小取决于CompassPoint类型.但是,每个long将使用8个字节,因此您已经超过建议的最大16个字节.虽然这不是一个很难的规则,但是你可能会比一个班级更糟糕的表现,这取决于你如何使用它.
结构的确切大小由JIT编译器确定,但通常情况下,您可以添加成员的大小来预测大小.虽然小数据类型将被填充,因此如果您CompassPoint只使用一个字节,它仍然需要4或8个字节才能使结构大小达到均匀边界.
结构不是不可变的,因为您可以更改其中的属性.将setter设为私有,并添加一个可以创建它的构造函数,使其不可变:
public struct Position {
public long PositionX { get; private set; }
public long PositionY { get; private set; }
public CompassPoint CompassPoint { get; private set; }
public Position(long x, long y, CompassPoint compass) {
PositionX = x;
PositionY = y;
CompassPoint = compass;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
712 次 |
| 最近记录: |