成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

處理結構內的C#數組淺析

開發 后端
這里介紹在 C/C++ 中這樣在結構中使用C#數組是完全正確的,因為這些數組將作為整個結構的一部分,在對結構操作時直接訪問結構所在內存塊。

C#有很多值得學習的地方,這里我們主要介紹C#數組,包括介紹C#中引用類型的類似定義語法等方面。

在 C/C++ 中這樣在結構中使用C#數組是完全正確的,因為這些數組將作為整個結構的一部分,在對結構操作時直接訪問結構所在內存塊。但在 C# 這類語言中,則無法直接如此使用,因為C#數組是作為一種特殊的引用類型存在的,如定義:

以下內容為程序代碼:

  1. public struct IMAGE_DATA_DIRECTORY  
  2. {  
  3. public uint VirtualAddress;  
  4. public uint Size;  
  5. }  
  6.  
  7. public struct IMAGE_OPTIONAL_HEADER  
  8. {  
  9. public const int IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16;  
  10.  
  11. public ushort Magic;  
  12.  
  13. //...  
  14.  
  15. public uint NumberOfRvaAndSizes;  
  16.  
  17. public IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];  

在C#中這樣定義結構中的數組是錯誤的,會在編譯時獲得一個 CS0650 錯誤:

引用:error CS0650: 語法錯誤,錯誤的C#數組聲明符。若要聲明托管數組,秩說明符應位于變量標識符之前

如果改用C#中引用類型的類似定義語法,以下內容為程序代碼:

  1. public struct IMAGE_OPTIONAL_HEADER  
  2. {  
  3. public const int IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16;  
  4.  
  5. public ushort Magic;  
  6.  
  7. //...  
  8.  
  9. public uint NumberOfRvaAndSizes;  
  10.  
  11. public IMAGE_DATA_DIRECTORY[] DataDirectory = new 
    IMAGE_DATA_DIRECTORY[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];  

則得到一個 CS0573 錯誤:

引用:error CS0573: “IMAGE_OPTIONAL_HEADER.DataDirectory” : 結構中不能有實例字段初始值設定項

因為結構內是不能夠有引用類型的初始化的,這與 class 的初始化工作不同。如此一來只能將數組的初始化放到構造函數中,而且結構還不能有無參數的缺省構造函數,真是麻煩,以下內容為程序代碼:

  1. public struct IMAGE_OPTIONAL_HEADER  
  2. {  
  3. public const int IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16;  
  4.  
  5. public ushort Magic;  
  6.  
  7. public uint NumberOfRvaAndSizes;  
  8.  
  9. public IMAGE_DATA_DIRECTORY[] DataDirectory;  
  10.  
  11. public IMAGE_OPTIONAL_HEADER(IntPtr ptr)  
  12. {  
  13. Magic = 0;  
  14. NumberOfRvaAndSizes = 0;  
  15.  
  16. DataDirectory = new IMAGE_DATA_DIRECTORY[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];  
  17. }  

這樣一來看起來似乎能使了,但如果使用 Marshal.SizeOf(typeof(IMAGE_OPTIONAL_HEADER)) 看看就會發現,其長度根本就跟 C/C++ 中定義的長度不同。問題還是在于結構中C#數組,雖然看起來此數組是定義在結構內,但實際上在此結構中只有一個指向 IMAGE_DATA_DIRECTORY[] 數組類型的指針而已,本應保存在 DataDirectory 未知的數組內容,是在托管堆中。

【編輯推薦】

  1. C#數組基礎介紹與操作詳解
  2. C#數組操作詳細剖析
  3. 淺析C#數組初始化性能測試
  4. C#數組和串操作經驗總結
  5. C#數組初始化全面分析
責任編輯:佚名 來源: IT168
相關推薦

2009-08-13 13:03:52

C#結構體數組

2009-08-26 13:07:07

C#交錯數組

2009-08-12 15:20:21

C#事件處理

2009-09-02 10:58:02

C#動態數組

2009-08-13 11:18:50

C#結構體

2009-08-13 13:29:04

C#結構體使用

2009-08-27 16:18:47

C#類C#結構體

2009-08-06 10:14:15

C#引用類型數組

2009-08-07 13:39:13

C#定義整型數組

2009-08-13 14:56:46

C#的結構體使用

2009-08-31 15:02:22

C#解析結構體指針

2009-09-18 10:58:31

C#數組操作

2009-08-28 14:25:57

C# byte數組

2009-08-07 11:26:53

C#數組結構

2009-08-13 14:06:37

C#結構體結構體和類的區別

2009-08-24 10:07:57

C#泛型處理

2009-09-17 09:20:45

C#操作XML

2009-09-02 19:13:08

C#處理文本文件

2009-07-31 14:20:46

結構數組C#函數的參數

2009-08-14 17:45:52

C# ArrayLis
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 337p日本欧洲亚洲大胆鲁鲁 | 免费国产精品久久久久久 | 毛片免费在线观看 | 国产精品美女久久久久久久久久久 | 中文字幕av高清 | a级片网站| 一区二区三区四区不卡视频 | 国产精品毛片一区二区三区 | 亚洲国产精品一区二区三区 | 亚洲成人av | 四虎影院新地址 | 91在线视频免费观看 | 涩涩鲁亚洲精品一区二区 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 日韩国产精品一区二区三区 | 亚洲图片视频一区 | 国产黄色av电影 | 免费观看av网站 | 日日操视频 | 97精品超碰一区二区三区 | 91亚洲国产精品 | 亚洲精品99 | 久久免费精品视频 | av在线伊人| 一区二区三区精品视频 | 婷婷在线视频 | 91在线视频观看免费 | 一本一道久久a久久精品蜜桃 | 欧美极品在线播放 | 国产中文字幕亚洲 | 亚洲精品久久久久久国产精华液 | 亚洲精品乱码久久久久久按摩观 | 黄色成人免费在线观看 | 国产蜜臀97一区二区三区 | www中文字幕 | 中文字幕一区二区三区四区 | 紧缚调教一区二区三区视频 | 超碰日本| 性做久久久久久免费观看欧美 | 日韩有码一区 | 伊人无码高清 |