成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

.NET的基元類型包括什么及Unmanaged和Blittable類型詳解

瀏覽:239日期:2022-06-14 14:25:59
目錄一、Primitive Type二、Unmanaged Type三、Blittable Type

在討論.NET的類型系統的時候,我們經常提到“基元類型(Primitive Type)”的概念,我發現很多人并沒有真正理解基元類型就究竟包含哪些(比如很多人覺得字符串是基元類型)。除了明確界定基元類型外,本篇文章還會簡單介紹額外兩種關于類型的概念——Unmanaged類型和Blittable類型。

一、Primitive Type二、Unmanaged Type三、Blittable Type

一、Primitive Type

.NET下的基元類型(Primitive Type)如下14個。我們可以這樣來記:長度(字節數)分別為1、2、4、8的有/無符號的整數;外加兩個基于指針寬度(下x86=4; x64=8)的整數,計10個。長度(字節數)分別為4和8的單精度和雙精度浮點數,計2個。外加布爾類型和字符類型, 計2個。所以我們熟悉的String(string)和Decimal(decimal)并不是基元類型。

整數(10):Byte(byte)/SByte(sbyte), Int16(short)/UInt16(ushort), Int32(int)/UInt32(uint), Int64(long)/UInt64(ulong), IntPtr(nint)/UIntPtr(nuint)浮點(2):Float(float), Double(double)布爾(1):Boolean(bool)字符(1):Char(char)

對于某個指定的Type對象,我們可以利用它的IsPrimitive屬性確定它是否為基元類型。

public abstract class Type{ public bool IsPrimitive { get; }}

Type對象的IsPrimitive屬性值最終來源于RuntimeTypeHandle類型如下這個內部靜態方法IsPrimitive。從該方法的實現和CorElementType的枚舉成員也可以看出,枚舉值2-13,外加CorElementType.I(IntPtr)和CorElementType.U(UIntPtr)這14個類型屬于基元類型的范疇,這與上面的列表是一致的。

public struct RuntimeTypeHandle{ [SecuritySafeCritical] internal static bool IsPrimitive(RuntimeType type) {CorElementType corElementType = GetCorElementType(type);if (((int)corElementType < 2 || (int)corElementType > 13) && corElementType != CorElementType.I){ return corElementType == CorElementType.U;}return true; }}[Serializable]internal enum CorElementType : byte{ End = 0, Void = 1, Boolean = 2, Char = 3, I1 = 4, U1 = 5, I2 = 6, U2 = 7, I4 = 8, U4 = 9, I8 = 10, U8 = 11, R4 = 12, R8 = 13, String = 14, Ptr = 15, ByRef = 16, ValueType = 17, Class = 18, Var = 19, Array = 20, GenericInst = 21, TypedByRef = 22, I = 24, U = 25, FnPtr = 27, Object = 28, SzArray = 29, MVar = 30, CModReqd = 31, CModOpt = 32, Internal = 33, Max = 34, Modifier = 64, Sentinel = 65, Pinned = 69}二、Unmanaged Type

顧名思義,Unmanaged類型可以理解不涉及托管對象引用的值類型。如下的類型屬于Unmanaged 類型的范疇:

14種基元類型+Decimal(decimal)

枚舉類型

指針類型(比如int*, long*)

只包含Unmanaged類型字段的結構體

如果要求泛型類型是一個Unmananged類型,我們可以按照如下的方式使用unmanaged泛型約束。我在《如何計算一個實例占用多少內存?》提到過,只有Unmananged類型采用使用sizeof操作符計算大小。

public static unsafe int SizeOf<T>() where T : unmanaged{ return sizeof(T);}三、Blittable Type

Blittable是站在基于P/Invoke的互操作(InterOp)角度對傳遞的值是否需要進行轉換(Marshaling)而作的分類。Blittable類型要求在托管內存和非托管內存具有完全一致的表示。如果某個參數為Blittable類型,在一個P/Invoke方法調用非托管方法的時候,該參數就無需要作任何的轉換。與之類似,如果調用方法的返回值是Blittable類型,在回到托管世界后也無需轉換。如下的類型屬于Blittable類型范疇:

除Boolean(bool)和Char(char)之外的12種基元類型,因為布爾值True在不同的平臺可能會表示成1或者-1,對應的字節數可能是1、2或者4,字符涉及不同的編碼(Unicode和ANSI),所以這兩種類型并非Blittable類型;Blittable基元類型的一維數組;采用Sequential和Explicitly布局的且只包含Blittable類型成員的結構或者類,因為采用這兩種布局的對象最終會按照一種確定的格式轉換成對應的C風格的結構體。如果采用Auto布局,CLR會按照少占用內存的原則對字段成員重新排序,意味著其內存結構是不確定的。

順便強調一下,DateTime/DateTimeOffset都采用Auto布局(如下所示),Guid雖然是一個默認采用Sequential布局的結構體,但是最終映射在內存種的字節依賴于字節序(Endianness),所以具有這三種類型字段的結構體或者類都不是Blittable類型。

[Serializable][StructLayout(LayoutKind.Auto)]public struct DateTime{ }[Serializable][StructLayout(LayoutKind.Auto)]public struct DateTimeOffset{ }

只有Blittable類型的實例才能調用GCHandle的靜態方法Alloc為其創建一個Pinned類型的GC句柄。以如下的代碼為例,類Foobar的兩個屬性都是Blittable類型,我們通過標注在類型上的StructLayoutAttribute將布局類型顯式設置成Sequential使其稱為了一個Blittable類型。

GCHandle.Alloc(new Foobar(), GCHandleType.Pinned);[StructLayout(LayoutKind.Sequential)]public class Foobar{ public int Foo { get; set; } public double Bar { get; set; }}

如果Foobar類定義成如下的形式,都不能使其稱為一個Blittable類型。前者默認采用Auto布局,后者的Bar屬性并不是Blittable類型。如果將這樣Foobar對象作為參數按照上面的方式調用GCHandle. Alloc方法,會直接拋出ArgumentException異常,并提示“Object contains non-primitive or non-blittable data. (Parameter 'value')”。

public class Foobar{ public int Foo { get; set; } public double Bar { get; set; }}[StructLayout(LayoutKind.Sequential)]public class Foobar{ public int Foo { get; set; } public DateTime Bar { get; set; }}

到此這篇關于.NET的基元類型包括什么及Unmanaged和Blittable類型詳解的文章就介紹到這了,更多相關.NET的基元類型內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: ASP.NET
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日韩精品最新网址| 国产精品久久久久天堂| 久久久噜噜噜久久人人看| 裸体健美xxxx欧美裸体表演| 国产中文一区二区| 久久久久久免费| 成人一区二区在线观看| 4438x成人网最大色成网站| 免费在线观看日韩欧美| 亚久久调教视频| 中文字幕亚洲一区二区av在线| 91在线porny国产在线看| 日韩精品资源二区在线| 国产.精品.日韩.另类.中文.在线.播放| 欧美天堂亚洲电影院在线播放| 日韩va欧美va亚洲va久久| 久久久精品网| 丝袜亚洲精品中文字幕一区| 国产精品乱子乱xxxx| 亚洲精品视频观看| 伊人成人网在线看| 国产精品视频你懂的| 91污在线观看| 久久天天做天天爱综合色| av在线不卡电影| 久久婷婷一区二区三区| 99re亚洲国产精品| xnxx国产精品| 97精品视频在线观看自产线路二| 日韩免费看的电影| 国产v日产∨综合v精品视频| 日韩一区二区精品在线观看| 国产高清亚洲一区| 日韩片之四级片| 成人免费视频app| 日韩欧美一级二级| 91小视频在线| 亚洲国产精品99久久久久久久久| 欧美区亚洲区| 亚洲欧美在线另类| 一区二区日韩免费看| 洋洋av久久久久久久一区| 久久精精品视频| 日韩成人一级大片| 欧美人动与zoxxxx乱| 国产伦精一区二区三区| 这里只有精品电影| 不卡视频一二三| 国产精品萝li| 99国内精品| 午夜亚洲福利老司机| 欧美午夜片在线观看| 国产成人一区在线| 亚洲国产精品av| 999亚洲国产精| 午夜精品国产更新| 精品视频一区二区三区免费| 国产一区二区女| 国产午夜精品久久久久久免费视 | 黑人巨大精品欧美黑白配亚洲 | 一级特黄大欧美久久久| 日本精品一区二区三区高清 | 午夜精品久久| 一区二区在线观看av| 久久综合中文色婷婷| 精品亚洲porn| 久久蜜桃香蕉精品一区二区三区| 欧美日韩在线大尺度| 亚洲精品国产无套在线观| 国产精品主播| 国产精品羞羞答答xxdd| 久久先锋影音av鲁色资源| 亚洲黄页一区| 捆绑变态av一区二区三区| 精品国产青草久久久久福利| 欧美日韩亚洲一区三区 | 亚洲成精国产精品女| 91精品国产一区二区三区香蕉 | aaa欧美日韩| 亚洲精品乱码久久久久久| 色94色欧美sute亚洲线路二| youjizz国产精品| 伊人夜夜躁av伊人久久| 欧美美女视频在线观看| 99久久精品国产精品久久| 亚洲影视在线播放| 欧美麻豆精品久久久久久| 国产精品swag| 日韩福利视频导航| 精品sm捆绑视频| 国产精品久久亚洲7777| 粉嫩av一区二区三区在线播放| 亚洲视频在线观看一区| 欧美日韩美少妇| 欧美性事免费在线观看| 日韩精品一区第一页| 久久久久久一级片| 久久亚洲综合网| 91亚洲国产成人精品一区二区三 | 欧美精选一区二区| 激情丁香综合| 国产综合一区二区| 亚洲婷婷综合久久一本伊一区| 欧美三级乱人伦电影| 欧美精品成人| 激情亚洲综合在线| 自拍偷拍亚洲综合| 在线播放国产精品二区一二区四区| 欧美日韩无遮挡| 国产一区二区福利视频| 亚洲婷婷综合色高清在线| 欧美一级高清大全免费观看| av成人黄色| 成人动漫一区二区在线| 偷窥国产亚洲免费视频| 国产精品视频第一区| 欧美日韩成人在线一区| 国产精品久久九九| 97精品视频在线观看自产线路二| 日韩精品1区2区3区| 国产欧美日本一区二区三区| 精品视频在线免费观看| 99在线精品免费视频九九视| 波多野洁衣一区| 美女视频一区二区| 亚洲视频1区2区| 精品蜜桃在线看| 一本大道久久a久久综合婷婷| 欧美日韩精品免费看 | 国产成人高清在线| 香蕉影视欧美成人| 国产精品嫩草99a| 91精品啪在线观看国产60岁| 亚洲综合不卡| 国产在线日韩| heyzo一本久久综合| 国内精品嫩模私拍在线| 亚洲成人中文在线| 最新成人av在线| 2017欧美狠狠色| 91精品婷婷国产综合久久竹菊| 六月婷婷久久| 91久久极品少妇xxxxⅹ软件| eeuss鲁片一区二区三区在线观看| 看电视剧不卡顿的网站| 亚洲一区二区三区自拍| 国产欧美精品国产国产专区| 欧美一三区三区四区免费在线看| 久久久青草婷婷精品综合日韩| 亚洲东热激情| 欧美人与禽猛交乱配视频| 成人性视频免费网站| 极品少妇xxxx精品少妇| 天天综合天天综合色| 亚洲美女屁股眼交3| 亚洲国产精品成人综合| 26uuu成人网一区二区三区| 欧美一区在线视频| 欧美日韩国产首页| 91九色最新地址| 另类亚洲自拍| 久久激情久久| 久久riav二区三区| 99亚洲精品| 在线欧美亚洲| 欧美国产综合| 欧美国产三级| 欧美日韩国产三区| 91丨九色丨国产丨porny| a美女胸又www黄视频久久| 国产白丝精品91爽爽久久| 国模一区二区三区白浆| 久久成人麻豆午夜电影| 奇米888四色在线精品| 天堂蜜桃一区二区三区| 亚洲电影第三页| 亚洲成年人影院| 亚洲成人1区2区| 亚洲6080在线| 午夜激情一区二区三区| 亚洲成人www| 亚洲福利视频一区| 亚洲国产成人av| 亚洲成精国产精品女| 亚洲v中文字幕| 午夜国产精品影院在线观看| 日韩高清一级片| 久久激五月天综合精品| 久久99久久久久久久久久久| 久久精品噜噜噜成人av农村| 久久99精品一区二区三区| 国产老肥熟一区二区三区| 狠狠色丁香久久婷婷综| 国产一区二区主播在线| 国产精品91xxx| 春色校园综合激情亚洲| 99久久综合狠狠综合久久| 91蝌蚪porny九色| 欧美色欧美亚洲另类七区| 激情久久久久久久|