CSharpThinking 擴充套件方法(四)

2022-01-17 13:09:04 字數 1208 閱讀 9531

本章主要描述擴充套件方法的應用及相關原理。

一, 演變

1.1 擴充套件方法特徵

1)必須在乙個靜態方法中。

2)至少有乙個引數。

3)第乙個引數必須附加this關鍵字作為字首。

4)第乙個引數不能有其他任何修飾符(如 out,ref)。

5)第乙個引數的型別不能是指標。

6) 如果擴充套件方法名稱與型別的方法一樣(如都命名為tostring),則只有型別的方法會被呼叫,而擴充套件方法的不會,這是乙個優先順序問題。

1.2 擴充套件方法與普通靜態方法的比較

c#2 時對乙個類進行擴充套件而又不能應用繼承方式時,只能編寫稍微「醜陋」的靜態方法。c#3允許我們更改靜態類,來假裝方法是類與生俱來的。

1

public

static

void

demo1()213

1415

///16

///c#2 常規靜態方法擴充套件

17///

18///

格式化資訊

19///

20public

static

string getlogerror(string

loginfo)21"

, loginfo);23}

24///

25///

c#3 用擴充套件方法實現的string型別擴充套件

26///

27///

28///

29public

static

string tologerror(this

string

loginfo)30"

, loginfo);

32 }

二, 擴充套件方法最大的用途是在linq中使用。

2.1.   where , select , orderby,

注:排序不會改變原序列的順序及型別,返回乙個新序列,這與list.sort不同,後者會改變序列。所以linq是無***的,除了一些及其的特殊情況。

1

company.department.select

2 (dept => new3)

7 .orderbydescending(x=>x.cost);

2.2.擴充套件方法更注重結果而非過程理解,這是與靜態方法的區別。

CSharpThinking 迭代器(三)

迭代器是行為模式的一種範例,而行為模式是一種簡化物件之間通訊的設計模式。它允許你乙個資料項列表中的所有元素,而無需關心序列是什麼型別 陣列,列表,鍊錶等。它能 非常有效的構建出乙個資料管道,資料項由此進入管道,並以不同的變換方式來遍歷這些資料,或者在訪問到末端之前進行一些過濾操作,事實上,這也是li...

SQL SERVER Buffer Pool擴充套件

buffer pool擴充套件是buffer pool 和非易失的ssd硬碟做連線。以ssd硬碟的特點來提高隨機讀效能。在buffer pool 擴充套件之前,sql server 從磁碟中讀入資料,並且存放在buffer pool中以供讀取和修改,修改完之後髒資料還是放在buffer pool中,...

dilated convolutions 擴張卷積

最近在閱讀 context encoding for semantic segmentation 中看到應用了dilated convolutions。擴張卷積與普通的卷積相比,除了卷積核的大小以外,還有乙個擴張率 dilation rate 引數,主要用來表示擴張的大小。擴張卷積與普通卷積的相同點...