这是原始声明:
[StructLayout(LayoutKind.Explicit, Size = 16)]
public unsafe struct X
{
[FieldOffset(0)] public ushort a;
[FieldOffset(2)] public fixed byte b[14];
};
我想让struct
只读,但我不知道我应该如何为数组编写一个吸气剂。我能想到的唯一解决方案是 getter方法:
[StructLayout(LayoutKind.Explicit, Size = 16)]
public unsafe struct X
{
[FieldOffset(0)] private ushort a;
[FieldOffset(2)] private fixed byte b[14];
public ushort A { get { return a; } }
public byte B(int i) { fixed (byte* p = b) { return p[i]; } }
};
是否可以为 b 编写 getter属性而不是 getter方法?
=== 更新 ===
当有多个数组字段时,我也想处理这种情况。例如:
[StructLayout(LayoutKind.Explicit, Size = 24)]
public unsafe struct Y
{
[FieldOffset(0)] private ushort a;
[FieldOffset(2)] private fixed byte b[14];
[FieldOffset(16)] private fixed byte c[8];
public ushort A { get { return a; } }
public byte B(int i) { fixed (byte* p = b) { return p[i]; } }
public byte C(int i) { fixed (byte* p = c) { return p[i]; } }
};
是否可以为 b 和 c 编写 getter属性而不是 getter方法?我想写y.B[i]
andy.C[i]
而不是y.B(i)
and y.C(i)
。