C 3 0 為我們帶來什麼(6) 擴充套件方法

2022-02-28 09:47:33 字數 542 閱讀 9059

在c#3.0中可以出現這樣的語法 

int i = 2;

console.writeline(i.square());

這就是擴充套件方法。

如何使int具有square方法呢?

只需要定義這樣乙個函式

public static int square(this int i)

this 表示針對int的例項和索引器的this的含義是一樣的,int表示給int這種型別進行擴充套件

但是這個擴充套件函式是有一定限制的。

1 擴充套件方法必須是靜態的 

2 擴充套件方法必須在頂級靜態類上定義

來看看il實現

.method public hidebysig static int32  square(int32 i) cil managed

// end of method myextention::square

c#編譯器生成了myextention.square(int32 i),並沒有對int型別進行改變。我們可以把他當作visitor模式來使用,但是跟visitor是有本質不同的。

C 3 0 為我們帶來什麼(5) 匿名型別

var employee new 無須顯示宣告乙個類,而且在初始化器裡面可以獲取上下文的變數 閉包 這就是c 3.0裡提供的匿名型別。並且可以對宣告的型別進行這樣的訪問 string name employee.name 來看看il的實現。method public hidebysig instan...

C 3 0新特性之擴充套件方法

c 3.0擴充套件方法是給現有型別新增乙個方法。現在型別既可是基本資料型別 如int,string等 也可以是自己定義的類。demo 1 擴充套件基本型別 namespace testextensionmethods 測試擴充套件方法類 class program demo 2 擴充套件自定義型別,...

C 3 0新特性之擴充套件方法

不講什麼廢話了,來點幹的,首先您看下這個類的定義和實現 using system using system.collections.generic using system.linq using system.text namespace exfunctions username 這是我在vs200...