C# using static 声明
許多實際的擴展可以通過擴展方法來實現,并非所有實際的擴展都有可以擴展的類型。對于某些場景,簡單的靜態方法比較適合。為了更容易調用這些方法,可以使用 using static 聲明除去類名。
例如,如果打開了 System.Console?
using static System.Console;
可以把下面的代碼
Console.WriteLine("Hello World!");
改為
WriteLine("Hello World!");
在使用此聲明之后,就可以使用類 Console 的所有靜態成員,如 WriteLine、Write、ReadLine、Read、Beep 等,而不需要編寫 Console 類。只需要確保在打開其他類的靜態成員時不要陷入沖突,或者在使用靜態方法時不要使用基類的方法。
下面看一個實際的例子。高階函數以函數作為參數,或者返回一個函數,或者返回兩個函數。在處理函數時,可以將兩個函數合并到一個函數中。
“
為此可以使用Compose 方法,如下面的代碼片段所示:
public?static?class?FunctionalExtensions {//...public?static?Func<T1,?TResult>?Compose<T1,?T2,?TResult>(Func<T1,?T2>?fl,?Func<T2,?TResult>?f2) =>?a?=>?f2(f1(a)); }該泛型方法定義了三個類型參數和兩個委托類型 Func 的參數。請記住,委托 Func<T,TResult>引用了一帶有單個參數的方法,其返回類型可以是不同的類型。Compose 方法接受兩個 Func 參數,把兩個方法組合到一個方法中。傳遞給Compose 的第一個方法(f1)可以有兩個不同的類型,一個用于輸入 T,另一個用于輸出(T2),而傳遞的第二個方法(f2)所需要的輸入類型(T2)與第一個方法的輸出類型(T2)相同,并且可以有不同的輸出類(TResult)。Compose 方法本身返回一個 Func 委托,其輸入類型與第一個方法相同(T),輸出類型與第二個方相同(TResult)。實現可能看起來有點可怕,因為后面跟著連續兩個 lambda 操作符。理解了方法返回的內容(一個方法)時,這個構造就將變得清晰。返回的方法是 Func<T1,TResult>。在第一個 lambda 操作符之后,=>f2(f1(2));定義了這個方法。變量的類型為 T1,返回的方法類型為 TResult,與 f2 返回的結果類型相同,f2 以輸入作為參數接收 f1。
要使用 Compose 方法,首先創建兩個委托 f1 和 f2,在輸入中添加 1 或 2。這些委托會與 Compose 方法相結合。由于 usingstatic 聲明打開了類 FunctionalExtensions 的靜態成員,所以可以不使用類名來調用 Compose 方法。在使用 Compose 方法創建 f3之后,就調用 f3 方法:
using System; using static System.Console; using static UsingStatic.FunctionalExtensions; namespace UsingStatic {class Program{static void Main(){//...Func<int,?int>?f1?=?x?=>?x?+?1;Func<int, int> f2 = x => x + 2;Func<int,?int> f3 = Compose(f1, f2);var?xl?= f3(39);?WriteLine(x1);//...}} }寫入控制臺的結果當然是 42。
聲明 Compose 方法時,參數類型可以在輸入和輸出之間有所不同。在下面的代碼片段中,傳遞給 Compose 方法的第一個方法接收一個字符串,并返回 Person 對象;第二個方法接收 Person 并返回一個字符串。如果編譯器不能從變量和返回類型中識別參數類型,就必須指定具體的委托類型,方法是接收字符串并返回一個 Person。只有變量名,并不能幫助編譯器確定它的類型。通過傳遞給 Compose 方法的第二個方法,顯然,輸入的類型與第一個方法返回的類型相同,因此不需要指定類型。在調用Compose 方法之后,變量 greetPerson 是兩個輸入方法的組合:
var greetPerson = Compose(new?Func<string,?Person>(name?=>?new?Person(name)),person?=>?$"Hello,?{person.FirstName}");?WriteLine(greetPerson("Mario?Andretti"));在WriteLine 方法中使用字符串 Mario Andretti 調用greetPerson 方法將字符串 Hello,Mario 寫入控制臺。
總結
以上是生活随笔為你收集整理的C# using static 声明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows 10 2022 年更新来
- 下一篇: 将k8s制作成3D射击游戏,好玩到停不下