前言 在C#中,var關鍵字是用來聲明變數類型的,它是C# 3.0推出的新特征,它允許編譯器根據初始化表達式推斷變數類型,有點跟javascript類似,而javascript中的var是弱類型。它讓C#變數聲明更加簡潔,但也導致了一些關於C#是強類型還是弱類型的爭論。 解析 在傳統意義上,強類型語 ...
前言
在C#中,var關鍵字是用來聲明變數類型的,它是C# 3.0推出的新特征,它允許編譯器根據初始化表達式推斷變數類型,有點跟javascript類似,而javascript中的var是弱類型。它讓C#變數聲明更加簡潔,但也導致了一些關於C#是強類型還是弱類型的爭論。
解析
在傳統意義上,強類型語言要求變數在聲明時必須指定類型,而弱類型語言則允許變數沒有指定類型。在C#中,var關鍵字可以用於聲明沒有指定類型的變數,看著C#仿佛是弱類型語言。
然而,C#其實是強類型語言,因為編譯器會在編譯期間對變數類型進行檢查。如果變數初始化表達式類型不匹配,編譯器將會報錯。因此,C#中的var關鍵字不是js的任意類型,而是允許編譯器根據初始化表達式推斷變數類型。
案例
我們可以通過反編譯var的中間語言來看到底是什麼樣的類型。大家看看下麵的案例。
1、 首先建一個新的.NET 6控制台項目。在分別建4個不同類型的var變數。生成一下並運行是否正常。最後用反編譯軟體ILspy查看剛纔生成的dll文件。如下圖
2、打開dll文件依次找到Program中的mian函數。我們可以看到,var消失了,說明它們已經在編譯時推斷出變數類型。
3、我們切換成IL中間語言,結果也未發現var關鍵字。從反編譯的結果來說,var它屬於強類型,通過編譯推斷出初始化的變數類型。
那麼作為靜態語言的C#為啥會引入var呢?
這還得從LINQ,linq可以在各種IEnumerable
結語
本文講述了var是強類型還是弱類型,並用案例證明瞭var是強類型。大家覺得var是強類型還是弱類型呢?歡迎留言討論。
1、面試官:C#的var和dynamic關鍵字,你能說清楚嗎?
來源公眾號:DotNet開發跳槽