這篇文章主要介紹“如何理解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#具有隱式類型聲明”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。