爲什麼var a = 7;
會將a
類型設置爲某種類型(即int
而不是byte
)? C#編譯器是否有任何規則/默認/檢查?爲什麼「var」關鍵字設置爲某種類型?
回答
目前尚不清楚「即時」的含義 - 但C#編譯器只是遵循規範中規定的規則。對於此類聲明:
var a = expression;
的a
類型是expression
類型。表達7
是int
類型的,儘管它也已知是一個恆定的byte
的範圍內,允許:
byte a = 7;
進行編譯。 可用性轉換爲byte
雖然不改變表達式7
的類型,所以int
是C#編譯器用於類型a
的類型。
請注意,我建議不要使用這樣的常量使用var
。它結束與代碼可以得到相當令人困惑的邊界int
,uint
,long
等是爲了幫助匿名類型,也幫助使代碼更可讀。當它使代碼減少可讀時,就不要使用它。
我想到了,即'var x = Some_Type',類型將是某種實現'Some_Type'接口的類。我可能是錯的,但這是我自己的簡單邏輯。整個謎語是關於數字的,實際上......感謝讓它更清晰,Jon! –
@AdrianK .:這裏最好的方法不是猜測一種語言是如何工作的 - 而是要閱讀它。就我個人而言,我喜歡使用語言規範來獲得權威的答案,但當然有些書可以減少某些威脅:) –
絕對! :)我試圖在Andrew的Troelsen書中找到有關我自己喜歡閱讀的書的答案,但我沒有。我也沒有得到任何谷歌查詢是有道理的,因爲我不知道英文和我想。 –
var
並不意味着「在運行時確定類型」,這意味着「使用賦值運算符右側表達式的結果類型確定類型」。這是在編譯時確定的。
有默認值,我不能'告訴你所有他們的手。類似於如果你打電話給5/7,它默認爲整數除法。但如果你做5/7.0,那麼它會做定期的劃分。 var只是將類型設置爲指定值的類型,在沒有強制轉換的情況下,它默認爲整數。
var關鍵字自動將賦值賦給編譯器可以轉換的類型。例如:var s =「」;包含一個字符串,並將被作爲一個字符串。
它設置一個表達式類型,因爲var是一個普通型和自CLR處理內存管理,你需要和將決定表達的類型,使變量那種類型。
var'根本不是一種類型,CLR的內存管理與此完全無關。 'var'是一種要求C#編譯器*推斷*類型的方法。這不是CLR決定的類型 - 它是編譯器。 –
的編譯器會將任何整數代碼中的文字,也沒有一個後綴,作爲int
。
所以這個:
byte myByte = 255;
..是真正隱式轉換int
常數255,一個字節。
那就是爲什麼var
被infered爲整數..因爲編譯器默認使用整數常量。
如果你做到這一點:
var a = 7L;
一個是long
類型。
- 1. var關鍵字不是推斷RepeaterItem的類型,爲什麼?
- 2. 爲什麼C99會爲複雜類型添加關鍵字?
- 3. 「IntentReceiver無法解析爲某種類型」。爲什麼?
- 4. 爲什麼不設置VAR(DART)
- 5. 設置MySQL架構時,爲什麼要使用某些類型?
- 6. javascript,爲什麼不刪除var關鍵字?
- 7. 爲什麼JavaScript中的參數不在var關鍵字前面?
- 8. PHP關鍵字'var'做什麼?
- 9. 爲什麼數據類型不像int中的int關鍵字?
- 10. 爲什麼在Julia中使用抽象類型關鍵字?
- 11. 爲什麼string-normalize-whitespace類型檢查關鍵字arg?
- 12. 什麼是Rust類型關鍵字?
- 13. 哪種類型的關鍵字自動默認爲?
- 14. 類無法解析爲某種類型
- 15. Haskell爲什麼這種類型檢查
- 16. 爲什麼這種類型鑄造?
- 17. 爲什麼這種類型不匹配?
- 18. 這種類型的表稱爲什麼?
- 19. 爲什麼不這種類型檢測?
- 20. 爲什麼這種類型不相等?
- 21. 爲什麼F#推斷這種類型?
- 22. 爲html textarea設置鍵盤類型
- 23. 爲什麼要使用VAR爲變量類型
- 24. 什麼是類型的關鍵字,當你通常把var放在哪裏?
- 25. 爲什麼「var derived1 = new Object(base)」將derived1.prototype設置爲base?
- 26. `var status = true`不能設置爲布爾值,爲什麼?
- 27. 將某個實例轉換爲某種類型有什麼意義?
- 28. 爲什麼Rust在「impl」關鍵字之後需要泛型類型聲明?
- 29. 爲什麼msgpack_object類型的MsgPack鍵?
- 30. 爲什麼我的int []類型的屬性設置爲null?
這就是所謂的[類型推斷(http://en.wikipedia.org/wiki/Type_inference).. [MSDN涵蓋它完美地..](http://msdn.microsoft.com/en-us/library /bb384061.aspx)。 –
我認爲他部分想知道爲什麼'var a = 7'沒有聲明一個字節......這是因爲C#編譯器將7看作一個int。 –
@DaveZych準確地說,你有我:) –