可能重複:
Difference between 「var」 and 「object」 in C#VAR VS對象在C#
我想知道var和對象之間的區別。
何時使用Var以及何時使用Object。
使用它們的優點和缺點。
可能重複:
Difference between 「var」 and 「object」 in C#VAR VS對象在C#
我想知道var和對象之間的區別。
何時使用Var以及何時使用Object。
使用它們的優點和缺點。
var
只是「讓編譯器爲我選擇正確的變量類型」(編譯時類型推斷更準確的術語)的簡寫。
object
另一方面是特定類型;所有其他參考類型都從object
派生,因此您可以將任何內容分配給類型爲object
的變量。
除非它是一個原始的,在這種情況下,它必須在分配到'對象'參考。 – 2010-07-10 23:15:58
我認爲應該添加到選定答案的東西是,如果您使用var
,那麼就像@Ben Voigt所說的那樣,您可以對存儲在var中的對象執行操作,而不必執行此操作。 –
Eric
2010-07-10 23:42:18
var
是,當你發現自己在問,難道我真的要鍵入長的類型名稱兩次,例如: -
Dictionary<string, Func<List<Func<int, int, double>>, IEnumerable<Tuple<double, string>>>> myDict = new Dictionary<string, Func<List<Func<int, int, double>>, IEnumerable<Tuple<double, string>>>>();
爲什麼沒有朋友,你不知道答案。使用var
代替:
var myDict = new Dictionary<string, Func<List<Func<int, int, double>>, IEnumerable<Tuple<double, string>>>>();
現在myDict
真的是Dictionary<string, Func<List<Func<int, int, double>>, IEnumerable<Tuple<double, string>>>>
,這樣你就可以添加東西出來,枚舉它,等
如果你宣佈它爲object
,你不能做任何操作與它由Dictionary
提供,只對所有對象有效。
我很想看到這些代碼在行動。 – 2010-07-10 23:50:20
您的電腦運行Windows? J/K。 我編造了這種特殊的類型,但我很努力地使用可能實際組合在一起的類型。 – 2010-07-11 00:10:42
@Joe,我不會... – jonnystoten 2010-07-11 00:11:11
var foo = "Hello, I am a string!";
// foo is a string, so this compiles
var fooCharArray = foo.ToCharArray();
object bar = foo;
// bar is not a string, so this does not compile
var barCharArray = bar.ToCharArray();
在第一個例子中,編譯器知道foo
是一個字符串,所以我們可以調用foo
字符串的方法。
在第二個示例中,我們將字符串foo
「上傳」到一個對象。現在編譯器不知道(因爲它不應該知道!)bar
實際上是一個字符串,我們不能在bar
上調用字符串方法。編譯器不允許從對象(或任何基本類型)到派生類型的隱式向下轉換(如System.String
)。它是編譯時類型安全規則的一部分。
var仍然是強類型的,但有了對象,你將不得不施放所有東西。
看起來非常類似於http://stackoverflow.com/questions/1552881/difference-between-var-and-object-in-c – Mathias 2010-07-10 23:19:44