1. 程式人生 > >C#中委託(上)

C#中委託(上)

一、委託的宣告和使用

介紹:委託是一種型別安全的類,他定義了返回型別和引數型別,委託類不僅包含對方法的引用,也可以包含對多個方法的引用。

使用場合:委託把方法當作引數使用,用於給一個方法傳遞另一個方法。有這種情況,有些方法的操作不是針對資料進行的,而是要對另一種方法進行呼叫,但是這種方法只知道他的返回型別和引數型別,至於具體的操作只有在執行的時候才知道,此時可以使用委託將方法當做引數傳遞。

委託的宣告:使用關鍵字 delegate,其他部分類似於方法的宣告,只不過沒有方法體。如:delegate void MyDelegate(int  x),指定該委託的例項都可以包含一個或多個方法的引用,該方法無返回值,有一個 int 型別的引數。

注意:

1、在定義委託的時候必須要表明他所表示的方法的返回型別和引數列表,和類的使用類似,先宣告一種型別的委託,然後建立該委託的一個或多個例項;

2、因為定義一個委託實際上是定義一個新類,所以可以在定義類的任何地方定義委託,可以在類的內部和外部,可以使用訪問修飾符:public ,private,protected 等。

下面給出示例:

// 自定義的資料類
public class MyData
{
	// 1、類內部的公有委託
	public  delegate int  MyD();
	// 2、私有委託
	private  delegate int  MyD1(int a);
	// 3、受保護的委託
	protected  delegate int  MyD2(string a);
}
// 類外部的委託
public delegate int MyD3();
public class MySubData:MyData
{
	// 使用受保護的委託宣告一個引用(該類繼承自MyData,可以使用基類中公有和受保護的成員)
	MyD2 a;
	// 使用類外部的公有委託
	MyD3 b;
	
}
public class Test
{
	// 使用 MyData 類內部的公有委託,使用類名訪問,宣告一個委託型別的引用 a
	public MyData.MyD a;
	// 建構函式中初始化 a 
	public Test()
	{
		a = MyTest;
	}
	public  int MyTest()
	{
		return 0;
	}

}
注意:委託定義不能使用 static 修飾符,類內部定義的委託,公有的(public),其他類可以訪問,需用類名指定,該類的派生類無需指定;私有的(private)只有該類的內部可以訪問;受保護的(protected)該類和派生類可以訪問。

下面是呼叫示例:

// 宣告並初始化物件test
Test test = new Test();
// 呼叫委託,不為空時呼叫
if(test.a != null)
{
	// 呼叫時的形式與呼叫方法一致
	int result = test.a(); // result = 0
}

注意:委託初始化時,只需要將方法名賦值給委託引用即可,不需要使用 new 呼叫建構函式初始化。使用時可以像方法一樣使用委託引用(前提是他不為空)。

相關推薦

C#委託()

一、委託的宣告和使用 介紹:委託是一種型別安全的類,他定義了返回型別和引數型別,委託類不僅包含對方法的引用,也可以包含對多個方法的引用。 使用場合:委託把方法當作引數使用,用於給一個方法傳遞另一個方法。有這種情況,有些方法的操作不是針對資料進行的,而是要對另一種方法進行呼叫

c#委託與多執行緒的實質

delegate(委託)的概念,.Net的委託本質上就是指向函式的指標,只不過這種指標是經過封裝後型別安全的。委託和執行緒是兩個不同的概念,執行緒是動態的,委託就是一個或一組記憶體地址,是靜態的。執行緒執行時如果遇到了指向函式的指標就執行這個函式。.Net為了方便程式設計,給委託賦予了兩種方式以供呼

C#委託回撥學習

C#中的委託相當於C中的函式指標,可以將一個函式作為引數進行傳遞; 1.   定義private delegate void WeiTuo(string str) 2.   宣告:WeiTuo wt; 3.  

詳解Objective-C委託和協議

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

C#委託和事件的區別

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

C#委託與事件的學習小結(一)

最近又學習了一些C#的小知識點,在此釋出部落格記錄一下。 一、委託 C#中的委託的關鍵字是delegate,我們可以使用委託型別來將已有的方法例項化出來,也可以將我們自己定義的方法作為引數來傳遞。 例如: private delegate string GetAStri

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

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

C#HttpWebRequest傳檔案請求轉發與WebResponse響應解析

對外暴露一個上傳檔案的WebAPI給第三方使用,實現層面上,本質上是將請求轉發到另外一個WebService,並處理它返回的結果,構造成指定的格式返回給第三方。 看程式碼: /// <summary> /// 測試:檔案上傳

C#委託的定義和使用

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

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

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

C#委託()

一、Action<T> 與Func<T>  除了使用自定義的委託之外,還可以使用 Action<T> 與Func<T> 委託,Action<T> 定義了一個無返回值,引數是T型別的委託,非泛型Action表示無引數

C++FTP傳功能(僅用系統庫)

#include <afxinet.h> void main() { BOOL dRes,pRes; HINTERNET hInternet; HINTERNET hConnect; hInternet = Interne

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

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

C#委託(下)

一、匿名方法 在使用委託的過程中不必定義僅由委託使用的方法,可以使用匿名方法。 宣告:類似於方法的宣告,不過引數列表前只有一個delegate關鍵字,沒有其他修飾符、返回值型別和方法名。例如:delegate (int a){ } 下面給出示例: // 聲明瞭一個有兩個 s

c#委託的使用

本文例項分析了C#中委託和事件的區別,分享給大家供大家參考之用。具體如下: 大致來說,委託是一個類,該類內部維護著一個欄位,指向一個方法。事件可以被看作一個委託型別的變數,通過事件註冊、取消多個委託或方法。本篇分別通過委託和事件執行多個方法,從中體會兩者的區別。 一、通過委託執行方法 class P

分分鐘用C#委託和事件

  每一個初學C#的程式猿,在剛剛碰到委託和事件的概念時,估計都是望而卻步,茫然摸不到頭腦的。百度一搜,關於概念介紹的文章大把大把的,當然也不乏深入淺出的好文章。可看完這些文章,大多數新手,估計也只是信心滿滿的覺得自己看懂了,一旦要在自己的程式中用上委託和事件,就傻眼了,根本不知道什麼情況下該用,也不知

C#PUT和POST傳檔案

HttpClient中上傳檔案 上一篇主要是提到了HttpClient幫助類,這次針對於上傳檔案進行補充,僅做記錄 public static string HttpUploadFile(string url, string path) {

C#委託_多播委託_以及事件的概要

1:委託            我們定義一段程式碼:Person   obj   =   new   Person   (); ,就是說

C# 如何在Excel插入標和下標

上標和下標常見於一些數學公式和化學表示式中,有時候我們需要將這些數學公式和化學式插入到Excel中,因此就涉及到如何在Excel中插入上標和下標。本文將介紹如何使用C#和Spire.XLS元件在Excel文件中插入上標和下標。 在使用以下程式碼前,需要引用Spire.Xls.dll到工程中,

C++筆記 第六十四課 C++的異常處理()---狄泰學院

如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。 學習C++編譯環境:Linux 第六十四課 C++中的異常處理(上) 1.C++異常處理 C++內建了異常處理的語法元素try…catch… try語句處理正常程式碼邏輯 catch語句處理異常情況 try