自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#具有隱式類型聲明描述

開發(fā) 后端
這里介紹C#具有隱式類型聲明,在C# 3.0中可以使用新增的關(guān)鍵字var來代替聲明中的類型,而由編譯器根據(jù)初始化表達式來推斷出變量的類型。

本文向大家介紹C#具有隱式類型聲明,可能好多人還不知道隱式類型聲明,沒有關(guān)系,看完本文你肯定有不少收獲,希望本文能教會你更多東西。

C#具有隱式類型聲明

在一個帶有初始化器的聲明語句中,待聲明的變量的類型是顯而易見的——和初始化表達式的結(jié)果類型一致。對于這種情況,在C# 3.0中可以使用新增的關(guān)鍵字var來代替聲明中的類型,而由編譯器根據(jù)初始化表達式來推斷出變量的類型。

  1. var i = 5; // int  
  2. var d = 9.0; // double  
  3. var s = "Hello"; // string  
  4. var a = new int[] { 1, 2, 3, 4, 5 }; // int[]  
  5.  
  6. Console.WriteLine("Type of variable <i>: {0}", i.GetType());  
  7. Console.WriteLine("Type of variable <d>: {0}", d.GetType());  
  8. Console.WriteLine("Type of variable <s>: {0}", s.GetType());  
  9. Console.WriteLine("Type of variable <a>: {0}", a.GetType()); 

上面的代碼在C# 3.0中是符合語法規(guī)則的,前四行代碼就是使用了隱式類型的聲明;而后四行代碼用于在運行時驗證各個變量是否擁有正確的類型。如果在Visual Studio 2005中運行這段代碼(為了能夠看到結(jié)果,請使用Ctrl+F5來編譯并啟動程序),會得到下面的結(jié)果:

  1. Type of variable <i>: System.Int32  
  2. Type of variable <d>: System.Double  
  3. Type of variable <s>: System.String  
  4. Type of variable <a>: System.Int32[] 

這表明,編譯器在編譯的時候,已經(jīng)正確地推斷了每個變量的類型,并將其嵌入到了程序集的元數(shù)據(jù)中。

這里有兩個限制,一是C#具有隱式類型聲明只能作用在局部變量上,二是這種聲明必須有初始化器(即等號和后面的表達式)。如果我們企圖在一個類中聲明一個具有隱式類型的域,就會出現(xiàn)一個編譯錯誤:Invalid token ’var’ in class, struct, or interface member declaration;而如果聲明中沒有出現(xiàn)初始化器,則會導致另外一個編譯錯誤:’=’ expected。

除了局部變量外,作用域為一個塊的數(shù)組也可以運用C#具有隱式類型聲明,例如:

  1. var ia = new [] { 1, 2, 3, 4, 5 }; // int[]  
  2. var da = new [] { 1.1, 2, 3, 4, 5 }; // double[]  
  3. var sa = new [] { "Hello", "World" }; // string[]  
  4.  
  5. Console.WriteLine("Type of array <ia>: {0}", ia.GetType());  
  6. Console.WriteLine("Type of array <da>: {0}", da.GetType());  
  7. Console.WriteLine("Type of array <sa>: {0}", sa.GetType()); 

在上面例子的數(shù)組聲明中,在運算符new和表示數(shù)組聲明的一對方括號之間省略了類型名字,但這在C# 3.0中仍然是符合語法規(guī)則的。編譯器會通過成員列表中的值的類型來推斷數(shù)組的類型。編譯并運行上面的例子,會得到如下的輸出:

  1. Type of array <ia>: System.Int32[]  
  2. Type of array <da>: System.Double[]  
  3. Type of array <sa>: System.String[] 

除了和具有隱式類型的局部變量具有相同的約束外,具有隱式類型的數(shù)組還有必須尊從這樣一個規(guī)則,即成員列表中的所有值必須是兼容的。也就是說,成員列表中必須存在這樣一個值,使得其他值可以隱式地轉(zhuǎn)換為該值的類型。因此,下面的聲明是不符合語法規(guī)則的:

  1. var aa = new [] { 1, "Hello", 2.0, "World" }; 

如果試圖編譯上面的代碼,會得到一個編譯錯誤:No array type can be inferred from the initializers。這是因為編譯器無法根據(jù)成員列表中的值來推斷數(shù)組的類型。

實際上,盡管C#具有隱式類型聲明使得傳統(tǒng)聲明的編寫方法更加便利,然而引入這種聲明方式的真正目的并不在于此,而是為了使局部變量和數(shù)組能夠訪問這樣一個新的語言構(gòu)造:匿名類型。

【編輯推薦】

  1. C# System.Xml集合
  2. C#實現(xiàn)Strategy接口
  3. C#編寫操作TreeView組件剖析
  4. C#實現(xiàn)IDisposable接口淺析
  5. C#異常處理詳細剖析
責任編輯:佚名 來源: 百度空間
相關(guān)推薦

2009-08-26 15:39:08

C#隱式類型局部變量

2009-09-01 18:05:17

C#類型聲明

2009-09-03 16:55:58

C#引用類型

2009-09-04 10:49:19

C#隱式轉(zhuǎn)換

2023-08-14 08:35:36

2009-08-13 17:04:09

C#語言C#程序

2009-09-04 14:04:53

C#文檔

2009-08-31 18:32:01

C# ListBoxE

2009-08-03 18:08:39

C# ICloneab

2009-08-17 16:32:34

C# Anonymou

2009-08-18 17:41:22

C# ListView

2009-08-26 17:49:36

C# readonly

2009-08-31 13:18:09

C# IWebMess

2009-08-20 09:30:03

C#開發(fā)WinForm

2009-08-03 16:45:02

C#異步Socket

2009-08-19 10:09:21

C#和C++

2009-09-04 13:22:31

C#實現(xiàn)多個接口

2009-09-16 09:01:40

C#多維數(shù)組

2009-08-21 17:31:58

C#垃圾回收

2009-08-13 17:58:34

C#存儲過程
點贊
收藏

51CTO技術(shù)棧公眾號