從 visual c# 3.0 開始,在方法範圍中宣告的變數可以具有隱式型別var。隱式型別可以替代任何型別,它的具體型別由編譯器根據上下文推斷而出。
下面就讓我來總結下隱式型別的一些特點:
1.var型別會被編譯器根據初始值的型別推斷出具體的型別
eg:
var t="test
";//
var會被推斷為string型別
var p=new person();//
已知person為乙個已定義好的類,編譯完成後**會變成: person p =new person();
2.var型別的區域性變數必須賦予初始值
eg:
var t=1;//正確,t會被推斷為int型別,值為1
var t;//
報錯:隱式型別的區域性變數必須已初始化
3.無法將null賦值給隱式型別的區域性變數
eg:
var t=null;//報錯:無法將""賦予隱式型別的區域性變數
4.var型別變數的定義必須是在方法中或者在屬性get、set訪問器中
eg:
publicvoid
test()
public
string
name
}class
program
5.var不能用作方法的引數
eg:
publicvoid test(var t){}//
報錯:上下文關鍵字"var"只能出現在區域性變數宣告中
6.不能當做返回值型別
eg:
publicvar test(){}//
報錯:並非所有**路徑都返回值 或者:上下文關鍵字"var"只能出現在區域性變數宣告中
7.語句中只宣告一次變數,宣告後不能更改型別
eg:
var t="100"
;t=100;//
報錯:無法將型別"int"隱式轉換為"string"
8.初始化不能是乙個匿名委託(也叫匿名方法、匿名函式)
eg:
var t = delegate(int i) ;//報錯:無法將"匿名方法"賦予隱式型別的區域性變數
9.可以用匿名類初始化
eg:
var person = new ;//正確//匿名類中的屬性一定要賦初始值,否則報錯
var person = new ;//
報錯:當前上下文中不存在"age" 當前上下文中不存在"name"
使用var定義變數和object不同,它在效率上和使用強型別方式定義變數完全一樣,因為還沒執行時編譯器就已經根據上下文推斷出是什麼型別了,所以要比object效率要高。善用隱式型別,在難以確定型別的情況下如將用於儲存匿名型別或匿名型別集合時使用會有奇效,在新語法中的使用頗多,是一把程式設計利器。
C 隱式型別
隱式型別 1 源起 在隱式型別出現之前,我們在宣告乙個變數的時候,總是要為乙個變數指定他的型別 甚至在foreach乙個集合的時候,也要為遍歷的集合的元素,指定變數的型別 隱式型別的出現,程式設計師就不用再做這個工作了。2 使用方法 來看下面的 var a 1 int a 1 var b 123 s...
C 隱式型別
隱式型別 using system using system.collections.generic using system.linq using system.text using system.threading.tasks namespace 隱式型別var a.gettype consol...
專案知識儲備 自動屬性 隱式型別Var
在 c 3.0 和更高版本中,當屬性的訪問器中不需要其他邏輯時,自動實現的屬性可使屬性宣告更加簡潔。客戶端 還可通過這些屬性建立物件。知識點一 自動屬性 例如下面 class myclass 一般屬性用法 privae string name public string name set 自動屬性 ...