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

沒有留言:
張貼留言