1. 程式人生 > >C#中委託的定義和使用

C#中委託的定義和使用

委託

如果我們要把方法當做引數來進行傳遞的話,就要用到委託。
簡單來說,委託是一個型別,這個型別可以賦值一個方法的引用。

宣告委託

在C#中使用一個類分為兩個階段。
首先,定義這個類,告訴編譯器這個類是由什麼欄位和方法組成的。
然後,使用這個類例項化物件。
在使用委託的過程中,也需要經歷著兩個階段。
首先,定義委託,告訴編譯器這個委託可以指向哪些型別的方法,然後,建立該委託的例項。
定義委託

delegate void IntMethodInvoker(int x);

上面這條語句,定義了一個委託叫做IntMethodInvoker,這個委託所指向的方法,要求:

  • 該方法要帶有一個int型別的引數。
  • 該方法的範滬指是void型別。
    即,定義一個委託要定義方法的引數和返回值,使用關鍵字delegate進行定義。
    其他定義方式:
delegate double TwoLongOp(long first, long second);

delegate string GetString();

使用委託

使用定義成功的委託建立例項。

private delegate string GetString();//該委託可以指向一個引數為空,返回值為string的方法。

static void main()
{   
    int x = 40;

    //ToString()是內建方法,可以將數字傳化為字串
//下面值得注意的是,x.ToString表示將變數x中的ToString方法給引用過來 //因為ToString沒有加(),因此這裡獲得的是這種方法的引用 //a指向了x中的ToSting方法 GetString a = new GetString(x.ToString); string s = a(); Console.WriteLine(s);//通過委託例項來呼叫x中的ToSting方法 } //輸出為40

通過委託型別來呼叫方法,與直接呼叫這個方法,效果是一樣的。

相關推薦

C#委託(delegate)多播委託的理解

委託 委託是定址方法的.NET版本。 什麼是定址方法? 簡單理解為我們通過委託傳遞一個方法給另一個方法。 什麼時候需要傳遞方法? 在微軟的官方文件和C#高階程式設計(第七版)這本書都提到一個例子-----在物件的排序演算法中,需要對物件進行比較,而不同物件比較

C#委託的+=-=深入研究 委託的多次註冊

無返回值的委託,你給它註冊多少個方法,它就執行多少個方法,而有返回值的委託,同樣註冊多少個方法就執行多少個方法,但返回的是最後一個方法的返回值。 += 大家都知道委託都繼承自System.MulticastDelegate,而System.MulticastDelegat

C#委託定義使用

委託 如果我們要把方法當做引數來進行傳遞的話,就要用到委託。 簡單來說,委託是一個型別,這個型別可以賦值一個方法的引用。 宣告委託 在C#中使用一個類分為兩個階段。 首先,定義這個類,告訴編譯器這個類是由什麼欄位和方法組成的。 然後,使用這個類例項化

為什麽C++聲明定義要分開寫

使用 還得 開始 階段 怎麽辦 clu 即使 tip 文件中 現在開始寫項目了,你會發現我們一般都要寫一個cpp,對應的還得有一個h文件,那麽為什麽在C++中我們要這麽做? .h就是聲明,.cpp就是實現,而所謂分離式實現就是指“聲明”和“定義”分別保存在不同的文件中,聲明

17、C#的常量結構的定義與使用

c3在C#裏面,常量指的是固定不變的量。這個常量可以是數值型、文本型或布爾型。例如: //定義常量 const int AGE=16; const string NAME="小紅"; const bool FLAG=true;

c語言定義常量定義的區別

沒有 int 符號表 cnblogs 格式 nbsp 參數 不同之處 區別   他們有共同的好處就是“一改全改,避免輸入錯誤”哪兩者有不同之處嗎?有的。   主要區別就在於,宏定義是在編譯之前進行的,而const是在編譯階段處理的 宏定義不占用內存單元而const定義的常量

詳解Objective-C委託協議

Objective-C委託和協議本沒有任何關係,協議如前所述,就是起到C++中純虛類的作用,對於“委託”則和協議沒有關係,只是我們經常利用協議還實現委託的機制,其實不用協議也完全可以實現委託。 AD:51CTO 網+ 第十二期沙龍:大話資料之美_如何用資料驅動使用者體驗

C#委託事件的區別

大致來說,委託是一個類,該類內部維護著一個欄位,指向一個方法。事件可以被看作一個委託型別的變數,通過事件註冊、取消多個委託或方法。本篇分別通過委託和事件執行多個方法,從中體會兩者的區別。   □ 通過委託執行方法 class Program { st

C語言巨集定義函式的取捨

原文連結:http://www.embedu.org/Column/Column177.htm 要寫好C語言,漂亮的巨集定義是非常重要的。巨集定義可以幫助我們防止出錯,提高程式碼的可移植性和可讀性等。 在軟體開發過程中,經常有一些常用或者通用的功能或者程式碼段,這些功能既可以寫成函式,也可以

C+++的宣告定義

《C++Primer》第四版 2.3.5節中這麼說到: ①變數定義:用於為變數分配儲存空間,還可為變數指定初始值。程式中,變數有且僅有一個定義。 ②變數宣告:用於向程式表明變數的型別和名字。 ③定義也是宣告:當定義變數時我們聲明瞭它的型別和名字。 ④extern

c++虛擬函式純虛擬函式定義

      只有用virtual宣告類的成員函式,使之成為虛擬函式,不能將類外的普通函式宣告為虛擬函式。因為虛擬函式的作用是允許在派生類中對基類的虛擬函式重新定義。所以虛擬函式只能用於類的繼承層次結構中。      一個成員函式被宣告為虛擬函式後,在同一類族中的類就不能

通俗易懂地解釋一下C#的事件委託

如果你用過C/C++ 的函式指標,那麼跟你說委託就是函式指標,事件就是儲存多個函式指標的陣列就夠了。 否則就舉栗子吧。 ----------開始嘮叨的分割線-----------如何使用委託? //第1步,申明,並說明該委託的簽名(即引數個數,型別) public delegate int SomeDeleg

C#定義控制元件隱藏基類成員(屬性、方法事件)的方法

       編寫自定義控制元件時,總是繼承C#中提供的Control類,而Control類是C#中所有窗體控制元件的基類,裡面定義了大量的屬性、方法和事件,而很多基類成員在自定義控制元件中可能不需要,因為編寫者會希望在自定義控制元件中隱藏這些成員,避免使用者呼叫這些成員。

C++的宣告定義

1、變數的宣告和定義 變數的宣告有兩種情況: (1)需要建立儲存空間; 例如:int a。在宣告時就建立了儲存空間。也稱為定義性宣告,即我們所說的“定義”。 (2)不需要建立儲存空間,只是告訴編譯器某變數已經在別處定義過了。 例如:extern int

如何在C#.net定義使用特性

Attribute的基本概念 經常有周邊人問,Attribute是什麼?它有什麼用?好像沒有這個東東程式也能執行。實際上在.Net中,Attribute是一個非常重要的組成部分,本文整理相關資料,提供給大家參考。 首先,我們肯定Attribute是一個類,下面是msd

C#委託、事件回撥函式的理解

在C#中我們經常會碰到事件,尤其是在WPF或者WinForm中,窗體載入、或者點選一個按鈕,都會觸發事件。實際上,事件是對委託的封裝。如果不進行封裝,讓委託暴露給呼叫者,呼叫者就可以把委託變數重新引用到新的委託物件,也就刪除了當前要呼叫的方法列表;更糟糕的是,公共的委託成員打破了封裝不僅導致程式碼難以維護和除

關於c++型別定義typedef類模板能否共用問題

#include <iostream> #include <deque> using namespace std; template <class T> class A { typedef deque<T> cont; p

C++,類函式分開定義宣告實現的方法

test.hpp #include <map> #include <queue> #include <string> #include <vector&g

Objective-C的協議代理(委託)設計模式

一、協議:          Objective-C中的協議(Protocol)類似於常用的介面,協議(Protocols)中定義的方法,在類中實現。協議(Protocol)通常用來實現委託物件(Delegate Object)。委託物件(Delegate Object)一

c#定義屬性 有 {get; set} 沒有{get; set} 的區別

取值 public 之前 {} 的區別 一個 自動屬性 至少 定義 屬性:public int age{get;set;}    //自動屬性    public int age{} 這種編譯不通過,get和set至少有一個,分別代表,取值和賦值 變量:public i