程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> C#中的null

C#中的null

編輯:.NET實例教程

什麼是 null?

null是所謂的文字關鍵字

什麼是文字關鍵字

計算機是二進制表示一切,文字關鍵字就是以文字的形式表示某個特定的二進制值。比如ture,false也是文字關鍵字。可以認為true表示0x0001;false表示0x0000的bool值

C#1.X中的null=空指針

MSDN中的解釋:null 關鍵字是表示不引用任何對象的空引用的文字值。null 是引用類型變量的默認值。

重點:區分引用類型值類型



string s="string";//引用類型。s是一個指針,該指針指向一個存放了"string"字符串的地址。
//*s指針[地址值(比如:0x00ff)]->[string]
int i=1;//值類型。i表示存放著數值一的實際區域。i[0x0001]

空指針的實際含義



string s;
string s=null;
//上面兩句是等效的。聲明了一個引用類型。
//假設聲明一個s相當於開辟了一個32位的內存區域,系統對該內存區域初始化全部為零。0x0000

當發現s中全部為0時,則認為該指針為空指針。即不引用(指向)任何對象。

為什麼C#1.x值類型不能為null呢?



int i;
//聲明一個32位的int型。系統對該內存區域初始化全部為零.0x0000

問題來了,當發現i中全部為零時,系統無法判斷該值是沒有賦值,還是為0值。

C#2.0中的可空類型Nullable<T>

在數據庫中,任何數據可以為空。但是在C#1.x卻不能,因此引入了Nullable<T>可空類型,T 必須是值類型

既然可空類型可以=null,那麼可空類型是值類型還是引用類型呢?

答:可空類型依然是值類型。但是對一個可空類型賦值為null和引用類型賦值為null的內部操作是不一樣的。

可空類型的內部結構中,有一個bool類型的變量。hasValue.當hasValue=false時,表示該對象為空。因此對於int?? i=null;所做的操作,其實是i.hasValue=false。而對string s=null所做的操作其實是*s=0;

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved