public
static
class stringhelper
}
iscapitalized方法像例項方法一樣被string來呼叫,像這樣:
console.writeline ("perth"
.iscapitalized());
擴充套件方法被編譯後會被編譯器轉換為普通的靜態類的靜態方法的呼叫,像這樣:
console.writeline (stringhelper.iscapitalized ("perth"));
這個轉換過程如下:
arg0.method (arg1, arg2, ...); // 擴充套件方法的呼叫
staticclass.method (arg0, arg1, arg2, ...); // 編譯器將它轉換成靜態方法呼叫
介面也可以一樣的進行擴充套件:
public static t first (this ienumerable sequence)
...console.writeline ("seattle".first()); // s
擴充套件方法在c#3.0引入。
擴充套件方法像例項方法一樣,支援整潔的鏈式的函式呼叫,考慮下面的兩個函式:
public
static
class stringhelper
public
static
string
capitalize (this
string s)
}string x = "sausage".pluralize().capitalize();
string y = stringhelper.capitalize (stringhelper.pluralize ("sausage"));
x和y的結果是一樣的,只不過x是使用的例項方法的方式進行呼叫,y使用的是靜態方法進行呼叫。
using system;
namespace utils
}}
如果要使用iscapitalized,那麼下面的程式必須匯入utils命名空間,因為這個方法在utils命名空間中定義。否則會出現編譯錯誤。
namespace
}}
class test
// this method always wins
}static class extensions
}
static class stringhelper
}static class objecthelper
}
下面的**呼叫的是stringhelper的擴充套件方法:
bool test1 = "perth".iscapitalized();
如果要呼叫objecthelper的擴充套件方法,我們必須顯示的去呼叫:
bool test2 = (objecthelper.iscapitalized ("perth"));
C 學習筆記(三) C 高階特性 匿名方法
delegate int transformer int i transformer sqr delegate int x console.writeline s qr 3 9他在語義上與下列的lambda表示式的宣告是一樣的 transformer sqr int x public event e...
C 學習筆記(三) C 高階特性 匿名型別
var dude new 編譯器將這個語句編譯成類似於下面的東西 internal class anonymousgeneratedtypename public string name public int age the equals and gethashcode methods are ov...
C 3 0 新特性學習筆記 4 擴充套件方法
擴充套件方法。相信大家都已經聽說過或已經用過這個新特性,這個也是我所喜歡的新特性之一.當我們需要對已有類的功能進行擴充套件時,我們通常會想到繼承,繼承已有類,然後為其加入新的行為。而c 3.0中加入的擴充套件方法特性,則提供了另一種實現功能擴充套件的方式,我們可以在不使用繼承的前提下實現對已有類本身...