Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么sizeof(Point)是8?_C#_.net_Sizeof - Fatal编程技术网

C# 为什么sizeof(Point)是8?

C# 为什么sizeof(Point)是8?,c#,.net,sizeof,C#,.net,Sizeof,我编写了代码,得到了奇怪的结果——整数i是8: unsafe { int i = sizeof(Point); } 检查结构点后,我发现以下字段: public bool IsEmpty { get; } public int X { get; set; } public int Y { get; set; } 比特数:32+32+1=65比特,因此大于8字节 那么,为什么sizeof返回8,而不是9 谢谢IsE

我编写了代码,得到了奇怪的结果——整数i是8:

unsafe
        {
            int i = sizeof(Point);
        }
检查结构点后,我发现以下字段:

    public bool IsEmpty { get; }
    public int X { get; set; }
    public int Y { get; set; }
比特数:32+32+1=65比特,因此大于8字节

那么,为什么sizeof返回8,而不是9

谢谢

IsEmpty
是一个属性,而不是字段。属性只是幕后的方法,因此它们不是结构大小的一部分。

点的属性只使用两个属性:

private int x;
private int y; 
Empty
实现为

[Browsable(false)]
public bool IsEmpty { 
    get {
        return x == 0 && y == 0;
    }
} 

两个
int
字段占用8个字节,一切正常。

是的,您可以编写!我试过做:struct SomeVal{public Int32 x;public Int32 y;public bool z;},大小是12!变量的最小块是4字节?@zzfima No。。。尝试
struct Test{bool Value;}
1字节。你看到的是额外的填充,因为代码< > SeaValue/Cuff>必须在4字节边界上对齐(因为它包含一个<代码>国际标准> 32代码/代码>),所以它的大小必须是4的倍数。注意填充需求随平台而变化,CLR对于C和C++的成员顺序没有相同的规则,有时候,我需要很多必要的填充物,除非有人用枪指着我,我永远不会考虑数据是如何被内部处理的。当然,也有头痛的情况,你无法避免。然而,在这种情况下,我有一件重要的事情叫我出国…@Joey,但请注意,对于
struct
,C#编译器发出
[StructLayout(LayoutKind.Sequential,Size=1)]
(请注意,是C#编译器做的……不能保证其他.NET语言也做同样的事情)