这个问题只是为了满足我的兴趣。阅读“在类和结构之间进行选择”页面显示“它的实例大小小于 16 字节。”。
鉴于这个简单的不可变的struct。
public struct Coordinate
{
private readonly double _latitude;
private readonly double _longitude;
public Coordinate(double latitude, double longitude)
{
_latitude = latitude;
_longitude = longitude;
}
public double Latitude
{
get { return _latitude; }
}
public double Longitude
{
get { return _longitude; }
}
}
Run Code Online (Sandbox Code Playgroud)
属性是否也计入 16 字节限制?还是只有字段才算?
如果后者不会使用structMicrosoft 提供的指南,因为 double 是 8 个字节?两个双精度数将是 16 个字节,正好是 16 个字节,不能少于 16 个字节。
只有字段才算数。
因此,在本例中,您有两个 64 位(8 字节)字段;你就在你的启发式的范围内。
请注意,如果您使用任何自动实现的属性,那么编译器将创建“隐藏”字段来支持这些属性,因此您的总和也应该考虑到这些属性。
例如,这个结构体也需要 16 个字节:
public struct Coordinate
{
public Coordinate(double latitude, double longitude) : this()
{
Latitude = latitude;
Longitude = longitude;
}
public double Latitude { get; private set; }
public double Longitude { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)