隱含類型局部變數
隱含類型的局部變數是用var關鍵字來聲明的,如下:
var i = 123;
var h=123.123;
var s = “oec2003";
var intArr = new[] {1,2,3,4} ;
var a = new[] { 1, 10, 100, 1000 };
乍一看有點像javascript中的聲明方式,雖然關鍵字一樣但是有著本質區別。
在c#3.0中用var關鍵字聲明的變數被賦值後,在編譯時間編譯器會根據變數值的類型自動推斷出變數的類型。所以仍然是強型別,這點和object不同。其實var 關鍵字並不是一個具體的類型,只是起到了一個預留位置的作用,編譯後將替換成相應的類型。要注意的一點是用var聲明的變數一定要賦初始值,否則會出現編譯錯誤,因為如果不賦值就無法根據值來推斷變數的類型。
var只能聲明局部變數,而且可以在foreach中使用,如:
var nums=new []{1,2,3,4,5};
foreach(var i in nums)
{
}
擴充方法
這是個非常有用的特性,擴充方法允許我們在不改變源碼的情況下添加現有類型中的執行個體方法。擴充方法所在的類必須為靜態類。如下:
public static class oec2003Extensions
{
public static bool IsValidEmail(this String s)
{
Regex regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
return regex.IsMatch(s);
}
}
上面的IsValidEmail靜態方法在靜態類oec2003Extensions類中,這個類可以在任何的名稱空間下,在要用的地方引用名稱空間就行。
IsValidEmail方法的作用是用來驗證電子郵件。方法中有三個參數:this String s 。this只是一個編譯上的要求,作為一個提示來告訴編譯器此方法有可能作為擴充方法來使用;String就是我們需要擴充的類型;s則為要驗證郵件的內容。下面來看看怎樣來使用此擴充方法。
protected void Button2_Click(object sender, EventArgs e)
{
if (this.TextBox1.Text.Trim().IsValidEmail())
{
Response.Write("email is right");
}
else
{
Response.Write("email is error");
}
}
是不是很神奇,在string類型中就多了一個剛才添加的IsValidEmail方法,可以直接調用,用來實現郵件地址的驗證。