これは元の宣言です。
[StructLayout(LayoutKind.Explicit, Size = 16)]
public unsafe struct X
{
[FieldOffset(0)] public ushort a;
[FieldOffset(2)] public fixed byte b[14];
};
読み取り専用にしたいのstruct
ですが、配列のゲッターの書き方がわかりません。私が理解できる唯一の解決策は、ゲッターメソッドです:
[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のゲッタープロパティを書くことは可能ですか?
===更新===
複数の配列フィールドがある場合も処理したいと思います。例えば:
[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]; } }
};
getterメソッドの代わりに b と cの getterプロパティを書くことは可能ですか? andの代わりにand と書きたいと思います。y.B[i]
y.C[i]
y.B(i)
y.C(i)