溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解C#具有隱式類型聲明

發布時間:2021-06-16 14:26:59 來源:億速云 閱讀:184 作者:chen 欄目:編程語言

這篇文章主要介紹“如何理解C#具有隱式類型聲明”,在日常操作中,相信很多人在如何理解C#具有隱式類型聲明問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何理解C#具有隱式類型聲明”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

C#具有隱式類型聲明

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

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

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

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

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

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

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

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

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

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

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

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

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

到此,關于“如何理解C#具有隱式類型聲明”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女