1. 程式人生 > >C# 委託的應用1:將方法作為引數傳遞給另一個方法

C# 委託的應用1:將方法作為引數傳遞給另一個方法

     長期以來,c和c++的程式設計師利用方法指標,將方法作為引數傳給另一個方法。c#使用委託來提供相同的功能,它將方法作為物件封裝起來,允許在執行時間接地繫結一個方法呼叫

     下面將通過氣泡排序的例子講解委託的產生

    示例1 :該方法對一個整數陣列執行升序排序

     

 產生的問題:如果想按照降序排序,有兩個選擇:一是複製上述程式碼,然後將大於運算子替換成小於運算子;二是傳遞一個附加的引數,指出如何排序。

如下示例2所示:

產生的問題:示例2中只考慮了兩種可能的排序方式。如果想按照字母,隨機或其它方式排序,BubbleSort()方法及其對應的SortType值得數量很快就會變得非常“恐怖”。

解決方法(委託的產生):為了減少重複程式碼的數量,可將比較方法作為一個引數傳給BubbleSort()方法。為了能將方法作為引數傳遞,委託----一個能表示方法的資料型別--因此產生了。

示例3:利用委託將比較方法作為一個引數傳給方法BubbleSort()

可根據需要利用不同的排序方法呼叫方法BubbleSort():BubbleSort(items,GreaterThan),BubbleSort(items,LessThan)注意委託ComparisonHandler是一個應用型別,但不必使用new來例項化它。直接傳遞名稱,而不是顯示例項化,這是自C#2.0開始支援的一個新語法,成為委託推斷。採用這個語法,編譯器將根據方法名(GreaterThan)來查詢方法簽名,並驗證它(方法GreaterThan)同方法(BubbleSort)的引數型別匹配

或BubbleSort(items,new ComparisonHandler(GreaterThan))這是C#1.0中的委託例項化的方法。

相關推薦

C# 委託應用1方法作為引數傳遞一個方法

     長期以來,c和c++的程式設計師利用方法指標,將方法作為引數傳給另一個方法。c#使用委託來提供相同的功能,它將方法作為物件封裝起來,允許在執行時間接地繫結一個方法呼叫。      下面將通過氣泡排序的例子講解委託的產生     示例1 :該方法對一個整數陣列執行升

Matlab中如何(自定義)函式作為引數傳遞一個函式

原文連結:http://blog.sina.com.cn/s/blog_53f2911901000a1h.html 假如我們編寫了一個積分通用程式,想使它更具有通用性,那麼可以把被積函式也作為一個引數。在c/c++中,可以使用函式指標來實現上邊的功能,在matlab中如何實現呢?使用函式控

物件作為引數傳遞方法

要求: (1)定義一個Circle類,包含一個double型的radius屬性代表圓的半徑,一個findArea()方法返回圓的面積。 (2)定義一個類PassObject,在類中定義一個方法printAreas(),該方法的定義如下: public void printAreas(Cirl

關於陣列作為引數傳遞函式的簡單使用

簡單的方式可以將陣列作為一個全域性變數,然後就可以在函式中使用了. 另外的一種方式為: function1(int a[]) { cout<<a[0]<<end

React Native之函式作為引數傳遞另外一個函式去呼叫

1 用法 我們一般喜歡把js裡面的函式作為引數傳遞給另外一個函式,然後再呼叫這個函式,有點像C語言裡面的函式指標         2 程式碼測試 寫了一個函式,2個引數分別是函式,然後更具資料決定呼叫哪個函式 /** *

Kotlin函式作為引數傳遞,使用雙冒號::引用其他方法

Kotlin 中 雙冒號操作符 表示把一個方法當做一個引數,傳遞到另一個方法中進行使用,通俗的來講就是引用一個方法。先來看一下例子: fun main(args: Array<String>) { println(lock("param1", "param2", ::get

C++】結構作為引數傳遞並返回

#include"iostream.h" #include"stdio.h" #include"string.h" struct Date { int day,month,year; }; Dat

Android Kotlin 函式作為引數傳遞

Kotlin支援函式作為引數傳遞,無需構建物件來包裝函式。 1、呼叫一個無返回的函式作為引數傳遞為:方法名()-> Unit class MainActivity : AppCompatActivity() { private val TA

vue定義的全域性變數在一個方法賦值過後在一個方法中是空

在學習vue的過程中,發現了許多小的問題,例如:我定義一個全域性變數a,為了可以在下面定義的方法中一直取得到這個全域性變數,在方法中我添加了一個jquery的click方法,在這個方法裡面用this.a = b(自定義的一個變數);然後到另一個方法中去使用這個全域性變數a,發現根本沒有進行賦值,還是

關於二維陣列作為引數傳遞函式的問題

剛碰到要寫一個函式func,要傳入一個二維陣列給該函式,於是寫成func(int a[][]);但馬上又發現將二維陣列傳給函式時必須指定第二維的維數,因為函式傳遞的是一個指向一個一維陣列的指標,這個一維陣列中儲存有著若干元素的陣列,所以函式必須要知道這個指標所指向物件的資訊

C++ primer 13.1拷貝、賦值和析構

拷貝構造函數 阻止 需要 函數 static let default 個數 調用 1.拷貝構造函數 基本形式:Name(const Name&) 對於類類型成員,會調用拷貝構造函數拷貝,對於內置類型成員就直接拷貝。對於數組,合成的拷貝構造函數會逐個拷貝都另一

學習 Microsoft SQL Server和C#技術記錄1連接數據庫

構造 reat 數據庫 alt 1.0 字符串 src mic 描述 工具:Microsoft SQL Server 2008R2    Microsoft visual studio 2008 學習筆記:連接數據庫 (1) 建立數據庫 USE master; IF DB_

讀書筆記_Effective C++_條款一C++視為一個語言聯邦

編程 pri 來看 讀書 由來 c++程序 一個 函數指針 集成 C++起源於C,最初的名稱為C with Classes,意為帶類的C語言,然而,隨著C++的不斷發展和壯大,在很多功能上已經遠遠超越了C,甚至一些C++程序員反過來看C代碼會覺得不習慣。 C++可以看成由

持續集成與持續部署寶典Part 1構建環境容器化

成熟 curl命令 設置 doc 包括 探討 完成 2.7 mage 介 紹隨著Docker項目及其相關生態系統逐漸成熟,容器已經開始被更多企業用在了更大規模的項目中。因此,我們需要一套連貫的工作流程和流水線來簡化大規模項目的部署。在本指南中,我們將從代碼開發、持續集成

C#學習篇1C#變數

該文章轉載於http://www.runoob.com/csharp/csharp-variables.html 僅供個人學習參考,不用做商業用途。學習中。。。。 C# 變數 一個變數只不過是一個供程式操作的儲存區的名字。在 C# 中,每個變數都有一個特定的型別,型別決定了變數的記憶體大

C#:撲克牌遊戲(1)規劃CardLib類庫開發撲克牌遊戲

(一):前言         這是《C#入門經典(第七版)》的學習筆記,接下來會通過一個撲克牌程式學習關於C#相關知識。 (二):前期思考過程         建立一個類庫,命名應該為CardLib,不過按照

【資料結構】順序表應用1多餘元素刪除之移位演算法

Problem Description 一個長度不超過10000資料的順序表,可能存在著一些值相同的“多餘”資料元素(型別為整型),編寫一個程式將“多餘”的資料元素從順序表中刪除,使該表由一個“非純表

彙編基礎練習題1AX中的數顯示輸出。

將AX中的數顯示輸出 編譯工具:Masm for Windows 整合實驗環境2012.5 (附帶一個工具下載地址https://download.csdn.net/download/qq_36931762/10825773 有需要可以去下載) DATAS SEGMENT ;此處

順序表應用1多餘元素刪除之移位演算法

Problem Description 一個長度不超過10000資料的順序表,可能存在著一些值相同的“多餘”資料元素(型別為整型),編寫一個程式將“多餘”的資料元素從順序表中刪除,使該表由一個“非純表

3324順序表應用1多餘元素刪除之移位演算法

#include <stdio.h> #include <stdlib.h> struct node { int a; struct node *next; }; int main() { struct node *p, *