先上代码:
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace ConsoleApp { public class Program { public struct structA { public int fieldA; public int propertyB { get; set; } } public struct structB { public int fieldA; public int propertyB { get { return 0; } set { } } } static void Main(string[] args) { Console.WriteLine($"{nameof(structA)} size is: {Marshal.SizeOf<structA>()}"); Console.WriteLine($"{nameof(structB)} size is: {Marshal.SizeOf<structB>()}"); Console.ReadLine(); } } }
猜猜结果是什么?不卖关子,结果如下:
structA size is: 8
structB size is: 4
个人结论:
在C#的结构体(struct)中,属性(property)如果没有手工实现getter/setter,则会在结构体本身内开辟空间存储该属性的值,如果有实现getter/setter, 则该属性不占用结构体的空间。