擴充套件方法。
相信大家都已經聽說過或已經用過這個新特性,這個也是我所喜歡的新特性之一.
當我們需要對已有類的功能進行擴充套件時,我們通常會想到繼承,繼承已有類,然後為其加入新的行為。而c# 3.0中加入的擴充套件方法特性,則提供了另一種實現功能擴充套件的方式,我們可以在不使用繼承的前提下實現對已有類本身的擴充套件,這種方法並不會產生新的型別,而是採用向已有類中加入新方法的方式來完成功能擴充套件。
在對已有類進行擴充套件時,我們需將所有擴充套件方法都寫在乙個靜態類中,這個靜態類就相當於存放擴充套件方法的容器,所有的擴充套件方法都可以寫在這裡面。而且擴充套件方法採用一種全新的宣告方式:
public static 返回型別 擴充套件方法名(this 要擴充套件的型別 sourceobj [,擴充套件方法引數列表])
與普通方法宣告方式不同,擴充套件方法的第乙個引數以this關鍵字開始,後跟被擴充套件的型別名,然後才是真正的引數列表。下面是使用示例:
namespace
jackdong.csharp3feature}}
如果你想呼叫這個函式可以在你所有呼叫的類中引入所在的命名空間(using jackdong.csharp3feature;)
然後就可以在自己的方法中呼叫這個方法:string.outlength(yourstring);
是不是很神奇。
大家都知道object是所有類的始祖,如果擴充套件object的方法會怎麼樣呢?在所有類中都能呼叫你所擴充套件的方法,在這裡就不在贅述,不信你可以試一下
.另例:
namespace
jackdong.csharp3feature
public
static
t slice
<
t>
(this
t source,
intindex,
intcount)
t result
=new
t[count];
array.copy(source, index, result,
0, count);
return
result;}}
class
public
override
void
run()
;intarray
=intarray.slice(1,
2);foreach
(var i
inintarray)
console.writeline(i);}}
}在上面的示例中,靜態的extensions類中有兩個擴充套件方法,第乙個方法是對string類的擴充套件,它為string類加入了名為toint32的方法,該方法沒有引數,並返回乙個int型別的值,它將完成數字字元向整數的轉換。有了這個擴充套件方法之後,就可對任意string類的物件呼叫toint32方法了,該方法就像其本身定義的一樣。
第二個擴充套件方法是乙個泛型方法,它是對所有陣列型別的擴充套件,該方法完成陣列的切片操作。
c# 3.0中的linq表示式,就是大量運用擴充套件方法來實現資料查詢的。
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...
C 3 0新特性之擴充套件方法介紹
擴充套件基本型別 namespace testextensionmethods 測試擴充套件方法類 class program demo 2 擴充套件自定義型別,同時展示了擴充套件方法帶引數情況,以及方法過載 namespace testextendmethod public string desc...