var 聲明文法也即是匿名型別聲明,
一如 JavaScript 中的 var 文法,其在編寫代碼時也是不需要確定其類型的,
但是,需要注意的是,在 C# 3.0 中的 var 和 JavaScript 中的 var 是不同的,
JavaScript 屬於弱類型語言,無所謂類型,而 C# 是強型別語言,
各種類型之間嚴密區分,
對於 JavaScript ,其資料的類型要等到在 RunTime 也就是執行時才能確定,
也就是各個資料的類型只有在你執行該部分代碼或者需要使用這個資料時,
這個資料的類型才會被確定,
而對於 C# 則不是這樣的,C# 是在編譯時間確定資料的類型的,
所以,如果使用 var 文法來聲明一個數組,而這個數組中既有 int ,又有 string,
那麼會編譯不通過而直接報錯,這是因為在進行編譯時間,
C# 便會確定這個數組的類型,而這個數組中既有 int 又有 string ,
所以無法在編譯時間使用基礎資料型別 (Elementary Data Type)來確定這個 var 聲明的數組的類型,所以會報錯,
所以,說到底, var 類型的還是一個強型別的文法,
只不過是在編寫代碼時是不確定的類型而已。
至於 Microsoft 為何要發明這個 var 聲明文法,
事實上是為了在 Linq 中使用,
其結合 Linq 可以發揮出更大的潛力。
雖然使用 var 聲明文法非常方便,
但是事實上,在使用時還是會有諸多的限制的,
最主要的有如下幾條:
不能再 Class/Struct/Interface 層面上使用,
不能聲明全域變數,
不能作為方法的傳回值類型,
不能作為方法的參數的類型,
而使用的場合也是比較廣的,
可以使用在 foreach 中,
可以使用在 for 中,
可以使用在 using 語句中,
可以使用在 Linq 技術中,
對於 var 的基本的文法,就看下面的一個執行個體吧
using System;
using System.Linq;
namespace CSharpLanguage
{
public partial class Demo__1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
MethodOne();
MethodTwo();
}
//var 聲明文法的使用
public void MethodOne()
{
//使用 var 聲明文法聲明一個隱式類型數組,並且資料為 double 類型
//在這裡定義時,數組中的內容必須均是同一種資料類型,
//不能同時定義多種資料類型在同一個 var 聲明的數組中
//比如不能定義 {12,"BaoBeiMe",13,434} 之類的數組
//如果這樣定義的話,這個數組在進行編譯時間便無法確定其這個數組的類型了
//從而會在編譯時間便失敗
var myNumArray = new[] { 12, 23, 43.5, 49.3, 32, 4, 0.76 };
Response.Write("<br/><br/>使用 myNumArray[i] 方式遍曆:<br/>");
for (int i = 0; i < myNumArray.Length; i++)
{
Response.Write(myNumArray[i] + "----");
}
Response.Write("<br/><br/>使用 myNumArray.ElementAt(i) 方式遍曆:<br/>");
for (int i = 0; i < myNumArray.Length; i++)
{
Response.Write(myNumArray.ElementAt(i) + "----");
}
Response.Write("<br/><br/>使用 foreach 方式遍曆:<br/>");
foreach (var value in myNumArray)
{
Response.Write(value + "----");
}
Response.Write("<br/><br/>使用 Linq to Object 方式遍曆:<br/>");
//這裡則是使用了 Linq to Object 方式來查詢數組中的內容了
var result = from p in myNumArray
select p;
foreach (var p in result)
{
Response.Write(p + "----");
}
//在這裡通過反射操作擷取這個使用 var 文法聲明的數組的類型,
//這樣便可以觀察出,實質上,這個 var 數組還是一個基本類型的數組
//只不過類型是在編譯時間才確定
Response.Write("<br/><br/>myNumArray 在進行編譯時間會轉化為強型別:" +
myNumArray.GetType());
}
public void MethodTwo()
{
//這個匿名型別 person 中的所有資料都是唯讀
//您不能在後續的代碼中的任何資料內容進行寫操作
//比如不能進行 person.Name="BaoBeiMe";
var person = new
{
Name = "XiaoZhen",
Sex = "男",
Age = "20",
BlogName = "BaoBeiMe"
};
Response.Write("<br/><br/>" + String.Format("姓名為:{0} ,性別是:{1} ," +
"年齡是:{2} , 部落格名是:{3} ",
person.Name, person.Sex, person.Age, person.BlogName));
}
}
}
以上就是是這個Demo的所有的 .aspx.cs Code-Behind 了
而範例的結果,我想是很容易的
不過也還是給出個,保證 Demo 的完整性
2010—2—01