C#中结构体(struct)使用属性(property)的坑

先上代码:

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, 则该属性不占用结构体的空间。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据