本章主要描述擴充套件方法的應用及相關原理。
一, 演變
1.1 擴充套件方法特徵
1)必須在乙個靜態方法中。
2)至少有乙個引數。
3)第乙個引數必須附加this關鍵字作為字首。
4)第乙個引數不能有其他任何修飾符(如 out,ref)。
5)第乙個引數的型別不能是指標。
6) 如果擴充套件方法名稱與型別的方法一樣(如都命名為tostring),則只有型別的方法會被呼叫,而擴充套件方法的不會,這是乙個優先順序問題。
1.2 擴充套件方法與普通靜態方法的比較
c#2 時對乙個類進行擴充套件而又不能應用繼承方式時,只能編寫稍微「醜陋」的靜態方法。c#3允許我們更改靜態類,來假裝方法是類與生俱來的。
1public
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是無***的,除了一些及其的特殊情況。
1company.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 引數,主要用來表示擴張的大小。擴張卷積與普通卷積的相同點...