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

分析C#不安全代碼

開發 后端
本文介紹C#不安全代碼,C#是.Net平臺上主流的開發語言,和經典的C/C++不同的是,C#所編寫的代碼是托管代碼,由GC來管理內存,省去了new/delete的煩惱。

C#是.Net平臺上主流的開發語言,和經典的C/C++不同的是,C#所編寫的代碼是托管代碼,由GC來管理內存,省去了new/delete的煩惱。但是,由于某些特殊的要求,比如和底層的操作系統接口,訪問內存映射設備或者實現對時間要求苛刻的算法時,提供了C#不安全代碼。

不安全上下文

C#不安全代碼只能寫在不安全上下文中。

通過unsafe 修飾符可以修飾:
class, struct, interface, or delegate
field, method, property, event, indexer, operator, instance constructor, destructor, or static constructor
unsafe-statement-block

指針的類型

在不安全上下文中,指針類型和引用類型或是值類型一樣。但是,指針類型可以用在不安全上下文之外的typeof中,雖然這么做不安全。

Type t = typeof(Int32*);返回的是System.Int32*
pointer-type:
unmanaged-type
void
unmanaged-type:
type

非托管類型不是引用類型,也不包含任何嵌套的引用類型的成員。

非托管類型就是下面的一種:
◆sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, or bool.
◆Any enum-type.
◆Any pointer-type.
◆Any user-defined struct-type that contains fields of unmanaged-types only.

和C/C++不同的是,聲明多個指針變量需要:

int *p1,*p2;

但是在C#中,int* p1,p2就聲明了兩個指針變量,并且*是在類型之后,不是在變量名之前。

和引用類型相同的是,指針可以為null(所有位為0),如果訪問一個指向null的指針會引發不可預知的結果。

Void* 表示一個指針指向未知類型。因為指向未知類型,所以不能通過*來訪為指向的變量,也不能對指針進行數學運算。但是,void*可以轉換為任何指針類型,反之亦然。

指針類型是一個單獨的類型。指針類型不是繼承自System.Object,,并且兩者也不能互相轉換。同樣裝箱和拆箱也不適合指針類型。但是不同類型指針之間可以互相轉換。

指針類型不能用于類型參數,當泛型方法的類型參數為指針類型會調用失敗。

指針類型還可用于易變字段類型。

雖然指針還能通過ref和out來傳遞,但是會造成不可預知的行為,當指針指向一個已經不存在的本地變量,或是指向一個實際不再固定的固定對象。比如:

  1. usingSystem;  
  2.  
  3. classTest  
  4. {  
  5. staticintvalue=20;  
  6.  
  7. unsafestaticvoidF(outint*pi1,refint*pi2){  
  8. inti=10;  
  9. pi1=&i;  
  10.  
  11. fixed(int*pj=&value){  
  12. //...  
  13. pi2=pj;  
  14. }  
  15. }  
  16.  
  17. staticvoidMain(){  
  18. inti=10;  
  19. unsafe{  
  20. int*px1;  
  21. int*px2=&i;  
  22.  
  23. F(outpx1,refpx2);  
  24.  
  25. Console.WriteLine("*px1={0},*px2={1}",  
  26. *px1,*px2);//undefinedbehavior  
  27. }  
  28. }  
  29. }  

方法可以返回指針類型。

  1. unsafestaticint*Find(int*pi,intsize,intvalue){  
  2. for(inti=0;i<size;++i){  
  3. if(*pi==value)  
  4. returnpi;  
  5. ++pi;  
  6. }  
  7. returnnull;  

主要有幾個操作符:
◆ *被用作間接訪問
◆ ->被用作通過指針來訪為結構的成員
◆ []用來做指針的索引器
◆ &用來獲得變量的地址
◆ ++和—用來自增和自減指針
◆ +和-用來做指針的算術運算
◆ ==, !=, <, >, <=, and =>用來比較指針
◆ stackalloc可以從棧上分配內存
◆fixed用來臨時固定一個變量,所以它的地址總是可以得到的。以上介紹C#不安全代碼

【編輯推薦】

  1. C#調用Windows API函數
  2. 詳解C#調用Outlook API
  3. C#連接Access、SQL Server數據庫
  4. 介紹C#調用API的問題
  5. C#調用Excel與附加代碼
責任編輯:佚名 來源: IT168
相關推薦

2015-07-01 14:48:51

2014-04-15 15:35:32

CC語言

2012-04-16 10:12:54

Java線程

2023-06-01 19:24:16

2020-11-03 12:32:25

影子物聯網物聯網IOT

2020-04-22 20:35:02

HashMap線程安全

2021-04-04 23:16:52

安全刷臉銀行

2024-01-19 08:42:45

Java線程字符串

2014-04-09 09:37:29

2014-09-12 17:44:23

2025-07-03 04:00:00

LLMAI模型

2009-11-12 08:38:34

2024-03-04 08:45:37

C#空引用異常Nothing

2015-05-27 16:13:05

2009-11-18 10:05:13

2010-08-16 10:01:01

2021-12-08 07:31:40

Linux安全病毒

2017-02-16 08:50:00

2015-12-10 15:07:15

2021-04-12 10:38:51

CC++谷歌
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本一卡精品视频免费 | 在线亚洲一区 | 日韩精品一区二区三区在线播放 | 久久精品视频在线观看 | 成人精品鲁一区一区二区 | 久久久久国产精品免费免费搜索 | 99精品免费 | 男女午夜激情视频 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 亚洲日本成人 | 国产成人精品a视频 | 久久久久久国产精品免费免费狐狸 | av网站免费在线观看 | 成人网在线看 | 一级黄色录像毛片 | 中文字幕一区二区三区四区五区 | 国产精品久久久久久久 | 欧美成人精品一区二区三区 | 黄色片网站在线观看 | 国产精品视频一区二区三区 | 国产成人高清视频 | 久久久久久999 | 国产精品视频久久 | 精品久| 国产精品入口麻豆www | 久久夜夜 | 日本视频中文字幕 | 天天色天天射天天干 | 日本久久久久久久久 | 伊人精品久久久久77777 | 狠狠色狠狠色综合日日92 | xnxx 日本免费 | 91福利在线导航 | 中文字幕蜜臀av | av毛片 | 国产精品视频网站 | 国产精品一区一区 | 午夜精品一区二区三区在线观看 | 久久久国产精品一区 | 在线观看亚洲精品视频 | 国产精品久久久亚洲 |