var v1=38.38 ; var v2=74.74; var v_sum=v1+v2;
這樣會不會很奇怪?自己剛遇到時,還一度以為是誰不小心把 javascript 放到 C# 裡了。我的老師常說:「行有不得,反求諸己」,的確,我有好一陣子沒看程式設計的書了。
在 C# 3.0 開始,引進了「隱含型別 (implicitly type )」,編譯器會依據指定給隱含型別變數的初始值自動決定變數的型別。換言之,如果不指定初始值,那隱含型別是否就無法決定正確的型別了?沒錯,使用隱含型別,一定要指定初始值。下面的寫法在編譯時,都會產生錯誤:
var v1; var v2=null;
使用隱含型別,目前聽到的主要好處有三:
第一:可以少打幾個字。
System.Data.DataSet ds1 = new System.Data.DataSet(); var ds2 = new System.Data.DataSet();看到了吧!這樣可以避免過度使用你的手指頭...,甚至連 namespace 都可以不用引用了。
第二:配合 LINQ 所產生的查詢結果。
// for linq test string[] words = {"a111","a222","b111","b222","c111" }; var v_selected_words = from w in words where w[0] == 'b' select w; foreach (string s in v_selected_words) { Console.WriteLine(s); } Console.ReadKey();
如此一來,對習慣使用 LINQ 的人來說,的確可以讓程式整潔一致些。
第三:提供匿名型別(Anonymous Type)。
// for anonymous test var v_anonymous= new { Name="paladin", Empno="3388"}; Console.WriteLine(v_anonymous.Name); //show: paladin Console.WriteLine(v_anonymous.Empno); //show: 3388 Console.ReadKey();
這裡省去了明確宣告類別或變數的動作,允許你直接使用。如果沒有匿名型別,原先的程式寫法,很可能就會如下所示,相較之下,的確省了不少程式。
namespace ConsolVar { class Program { static void Main(string[] args) { MyClass oM = new MyClass(); oM.Name = "paladin"; oM.Empno = "3388"; Console.WriteLine(oM.Name); //show: paladin Console.WriteLine(oM.Empno);//show: 3388 Console.ReadKey(); } } public class MyClass { private string _Name; private string _Empno; public string Name { get { return _Name; } set { _Name = value; } } public string Empno { get { return _Empno; } set { _Empno = value; } } } }
瞭解了隱含型別所帶來的好處,但還是要知道他的限制。目前的隱含型別,只能夠用在區域變數而已,而且也不能夠用在類別屬性的宣告裡。例如上面的 MyClass ,下面的寫法則是錯誤的:
public class MyClass { private string _Name; private string _Empno; public string Name { get { return _Name; } set { _Name = value; } } public string Empno { get { return _Empno; } set { _Empno = value; } } var v = "123"; //錯誤用法 }
參考:
01:var (C# Reference)
02:Implicitly Typed Local Variables (C# Programming Guide)
03:[C#] 使用 var 關鍵字宣告隱含型別
04:C# 3.0的var隱含型別宣告
05:Anonymous Types
06:C# 3.0 Tutorials: What is Anonymous type?
07:Beginning ASP.NET 3.5 in C# 2008 From Novice to Professional,Second Edition,Matthew MacDonald,Apress
沒有留言:
張貼留言