委託和方法

2021-07-12 04:04:32 字數 2845 閱讀 8301

-1-委託的作用:使用委託將方法本身作為引數進行傳遞。

-2-委託的定義:委託是一特殊的引用型別,它將方法也作為特殊的物件封裝起來,從而使得方法作為變數或者引數進行傳遞。

-3-使用方法:

delegate 返回值型別 names_weituo(參數列)//這裡的返回值型別是其引用的函式的返回值型別,參數列是引用函式的參數列
例如:現有函式void add (double a,double b)

那麼定義乙個這樣的委託:delegate void weituoadd(double a,double b);

下面是命名方法:

封裝命名方法:names_weituo fuc=new names_weituo(add) //add只是乙個函式名 

names_weituo fuc = add;

-4-委託的加減運算

委託物件的相加(合併)就是可以在執行乙個合併後的物件時依次呼叫相應的函式。

下面是一些運算的性質:names_weituo fuc1=null,fuc2=add;

<1>當fuc2自減時:fuc2-=fuc2;那麼fuc2=null,這時候通過其進行方法呼叫會引發程式異常。

<2>當fuc1=add+mul+sub;那麼現在fuc1-=mul,這時候將mul這個方法從已經合併的委託物件中刪除。

-5-傳遞委託物件:c#允許將委託物件作為其它方法的引數或者返回值進行傳遞。

例如下面的程式:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace 傳遞委託物件

; double a, b;

console.writeline("請輸入要計算的兩個數字:");

a = double.parse(console.readline());

b = double.parse(console.readline());

while(true)

}static calculate getcalculate(int i)

static void add(double a, double b)

+=", a, b, a + b);

}static void sub(double a, double b)

-=", a, b, a - b);

}static void mul(double a, double b)

*=", a, b, a * b);

}static void div(double a, double b)

/=", a, b, a / b);}}

}

下面的程式也是對上面過程的加強一些理解:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace 通過委託來封裝方法

; double a, b;

console.writeline("請輸入需要計算的數字:");

a = double.parse(console.readline());

b = double.parse(console.readline());

calculate mulit = fuc[0] + fuc[1]+fuc[2]+fuc[3];//委託物件的相加,按此順序依次執行相應函式

mulit(a, b);

while (true)

}static void add(double a, double b)

+=", a, b, a + b);

}static void sub(double a, double b)

-=", a, b, a - b);

}static void mul(double a, double b)

*=", a, b, a * b);

}static void div(double a, double b)

/=", a, b, a / b);}}

}

遺留:如何返回委託物件列表。

擴充套件方法 委託和Lambda

舉例演化lambda string names 問題 從陣列names中篩選字元長度為5的成員 先宣告乙個返回型別為bool的靜態函式 public static bool islengthfive string s return s.length 5 enumerable中的where方法是擴充套...

擴充套件方法 委託和Lambda

舉例演化lambda string names 問題 從陣列names中篩選字元長度為5的成員 先宣告乙個返回型別為bool的靜態函式 public static bool islengthfive string s return s.length 5 enumerable中的where方法是擴充套...

C 委託方法

什麼是委託 可以認為委託是持有乙個或多個方法的物件。下面我們講提供建立和使用委託的語法和語義。在後面你將看到如何使用委託將可執行的 從乙個方法傳遞到另乙個,以及為什麼這樣做是非常有用的。我們將從下面的示例 開始。如果此時你有些東西弄不明白,不必擔心,我會在本章剩餘內容中介紹委託的細節。開始部分宣告了...