如何计算结构体实例的大小?

gcs*_*cso 5 c# struct

这个问题只是为了满足我的兴趣。阅读“在类和结构之间进行选择”页面显示“它的实例大小小于 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 个字节。

Luk*_*keH 4

只有字段才算数。

因此,在本例中,您有两个 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)