結(jié)構(gòu)體定義c++和c#基本差不多 只是C#沒有Union,下面是C++結(jié)構(gòu)體定義 struct{ union{ 或?qū)懗扇缦翪++聯(lián)合體Union定義 union{ C#中沒有聯(lián)合體Union,,可以通過手動控制結(jié)構(gòu)體每個(gè)元素的位置來實(shí)現(xiàn),,這需要結(jié)合使用StructLayoutAttribute,、LayoutKind以及FieldOffsetAttribute,。使用時(shí)必須引用System.Runtime.InteropServices,下面用C#模擬C++中U的聯(lián)合 using System; using System.Collections.Generic; using System.IO; using System.Text using System.Runtime.InteropServices namespace union { public unsafe struct A { public ushort ia; public fixed char iac[4]; public fixed short ias[4]; } public unsafe struct B { public uint ib; public fixed char iac[4]; public fixed short ias[4]; } public unsafe struct C { public fixed int ix[3]; } public struct D { public uint id; } //定義結(jié)構(gòu)屬性,結(jié)構(gòu)類型為精確定位,大小12字節(jié) [StructLayout(LayoutKind.Explicit, Size = 12)] public struct U { [FieldOffset(0)]//結(jié)構(gòu)A定位在偏移0的位置 public A a; [FieldOffset(0)]//結(jié)構(gòu)B定位在偏移0的位置 public B b; [FieldOffset(0)]//結(jié)構(gòu)C定位在偏移0的位置 public C c; [FieldOffset(0)]//結(jié)構(gòu)D定位在偏移0的位置 public D d; } } 也可以不定義U的Size,這時(shí)結(jié)構(gòu)體U的Size為U內(nèi)結(jié)構(gòu)最大 ,默認(rèn)情況下,,C# 不支持指針?biāo)惴ā?不過,通過使用 unsafe 關(guān)鍵字,,可以定義可使用指針的不安全上下文,。不安全代碼不一定是危險(xiǎn)的,只是其安全性無法由 CLR 進(jìn)行驗(yàn)證的代碼,。在某些情況下,通過移除數(shù)組界限檢查,,不安全代碼可提高應(yīng)用程序的性能,。
|
|