最近一直在研究.Net Micro Framework字體文件(tinyfnt),由於tinyfnt文件頭部有一段描述數據,所以很想定義一個結構體,像VC一樣直接從文件中讀出來,省得用流一個個解析很是麻煩。
沒有想到在中竟沒有直接的指令,想必設計者認為提供了流和序列化技術,一切問題都可以迎刃而解了。
在中結構體是一個比較復雜的東西,在此之上有很多需要設置的參數,否則用起來就很容易出錯。下面是msdn上一段描述,看看也許有助於理解C#語言中的結構體。
通過使用屬性可以自定義結構在內存中的布局方式。例如,可以使用 StructLayout(LayoutKind.Explicit) 和 FIEldOffset 屬性創建在 C/C++ 中稱為聯合的布局。
[System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit)]
struct TestUnion
{
[System.Runtime.InteropServices.FIEldOffset(0)]
public int i;
[System.Runtime.InteropServices.FIEldOffset(0)]
public double d;
[System.Runtime.InteropServices.FIEldOffset(0)]
public char c;
[System.Runtime.InteropServices.FIEldOffset(0)]
public byte b;
}
在上一個代碼段中,TestUnion 的所有字段都從內存中的同一位置開始。
以下是字段從其他顯式設置的位置開始的另一個示例。
[System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit)]
struct TestExplicit
{
[System.Runtime.InteropServices.FIEldOffset(0)]
public long lg;
[System.Runtime.InteropServices.FIEldOffset(0)]
public int i1;
[System.Runtime.InteropServices.FIEldOffset(4)]
public int i2;
[System.Runtime.InteropServices.FIEldOffset(8)]
public double d;
[System.Runtime.InteropServices.FIEldOffset(12)]
public char c;
[System.Runtime.InteropServices.FIEldOffset(14)]
public byte b;
}