c 引數列表中的this 擴充套件方法的使用

2021-09-29 16:50:15 字數 1582 閱讀 5680

public static void addslidefromright

(this storyboard storyboard,

float seconds,

double offset,

float decelerationratio=0.9f)

具體方法體我們就不看了,只看在定義方法的引數列表中的第乙個引數,寫的:this storyboard storyboard

storyboard 代表了引數型別,this關鍵字表示了該方法是storyboard型別的擴充套件方法。

關於擴充套件方法,有如下幾點需要注意的地方:

1. 擴充套件方法是一種特殊的靜態方法,雖然是靜態方法,但是可以像使用型別上的例項方法一樣去使用擴充套件方法(呼叫擴充套件方法與呼叫在型別中實際定義的方法之間沒有明顯的差異)。

2. 擴充套件方法的第乙個引數指定該方法作用於哪個型別,並且該引數以this修飾符為字首。

3. 擴充套件方法必須在非范型靜態類中定義。

為了便於理解以上的幾點概念,特意嘗試了一下,對string型別進行擴充套件:

//必須在靜態類中定義擴充套件方法

public static class program

//自定義string型別的擴充套件方法

public static void extensionmethod(this string mystring)

}

以下是控制台的輸出結果:

其實,提到擴充套件方法,就應該想到自己第一次接觸的這個概念,是在學習action和function的時候,當初研究where方法就有涉及。下面我們來看一下關於list的where擴充套件方法:

listnumbers = new list() ;

numbers.where(x=>x>5);

//這裡是常規用法

listnewnumbersa= numbers.where(x => x > 5).tolist();

foreach (var item in newnumbersa)

console.writeline("\n\n\n\n");

listnewnumbersb =

//因為是定義在靜態類中的靜態方法,因為也可以直接用呼叫靜態方法的方式去執行

enumerable.where(newnumbersa, x => x > 5).tolist();

foreach (var item in newnumbersb)

從輸出結果可以看出,對於擴充套件方法:

類的例項.靜態擴充套件方法()

和靜態類.靜態擴充套件方法()

效果是等同的。

最後貼一張圖來總結一下:

方法的過載,動態引數列表

今天學習了方法的過載。方法的過載就是在方法名相同的情況下可以通過傳進不同的引數來利用方法執行不同的操作。方法的不同體現在,引數的資料型別,順序,個數。在沒有與傳遞引數型別一致的方法的時候!會自動找乙個引數型別可以進行轉化的進去 自動 比如在引數為int型別的方法,傳遞的是char型別的值,這個時候會...

python 中的變長引數列表

在python中實現變長引數可以通過關鍵字引數以及非關鍵字引數來實現,使用 指定字典為關鍵字引數,指定元組為非關鍵字引數。1.關鍵字引數 定義含有非關鍵字引數的函式 def func name 位置引數或缺省引數,non keyword args def func1 arg1,arg2,arg3 p...

python 中的變長引數列表

在python中實現變長引數可以通過關鍵字引數以及非關鍵字引數來實現,使用 指定字典為關鍵字引數,指定元組為非關鍵字引數。定義含有非關鍵字引數的函式 def func name 位置引數或缺省引數,non keyword args def func1 arg1,arg2,arg3 print arg...