C#中的委托使用
從今天開始寫關(guān)于C#的系列文章,本篇文章主要講解C#中的委托使用。
委托其實(shí)就是一種數(shù)據(jù)類型,和int,string是一樣的概念。
如果要把一個(gè)字符串賦值給一個(gè)變量,用string聲明一個(gè)變量即可。如果要把一個(gè)方法賦值給一個(gè)變量,那么用什么關(guān)鍵字呢?當(dāng)然就是用委托了,所以用委托聲明的變量就可以接受一個(gè)方法了,之后那個(gè)變量就可以像方法一樣執(zhí)行。
下面開始詳細(xì)介紹:
先看一段代碼:
static void Main(string[] args) { int i; //可以接受一個(gè)整數(shù)的變量 string str; //可以接受一個(gè)字符串的變量 }
在Main方法內(nèi)聲明了2個(gè)變量:i和str。大家都很熟悉的代碼,變量i表明它可以接受一個(gè)整數(shù),變量str表明它可以接受一個(gè)字符串。
那么如果我想聲明一個(gè)變量既可以接受整數(shù)又可以接受字符串,那該用什么數(shù)據(jù)類型來聲明這樣的變量呢?
答案很簡單:用class。
public class MyClass { public int i { get; set; } //接受整數(shù) public string str { get; set; } //接受字符串 }
那么我們就創(chuàng)建了一種數(shù)據(jù)類型:MyClass,用它聲明的變量可以同時(shí)接受一個(gè)整數(shù)和一個(gè)字符串。
如下:
static void Main(string[] args) { MyClass obj = new MyClass(); obj.i =1; obj.str ="我是字符串"; }
現(xiàn)在問題來了:我想要一種數(shù)據(jù)類型可以聲明一個(gè)變量用于接受一個(gè)方法。
既然這種數(shù)據(jù)類型要接受一個(gè)方法,那我們先看看方法長什么樣:
public string Method(int m,int n) { return ""; }
上面的Method方法最主要的特點(diǎn)就是這個(gè)方法的輸入?yún)?shù)數(shù)據(jù)類型與輸出的數(shù)據(jù)類型。
通常我們會調(diào)用各種方法,調(diào)用方法前我們會確定方法的輸入?yún)?shù)的數(shù)據(jù)類型和方法輸出的數(shù)據(jù)類型,至于方法的主體我們通常不關(guān)心,方法的主體由方法編程人員去完成即可。
所以我們編寫一個(gè)方法,調(diào)用一個(gè)方法前都要明確的方法的輸入輸出數(shù)據(jù)類型。
對于上面Method方法的輸入數(shù)據(jù)類型為2個(gè)整數(shù),輸出的是一個(gè)字符串。
現(xiàn)在我們要聲明一個(gè)變量來接受這個(gè)方法,那么這個(gè)變量的數(shù)據(jù)類型也應(yīng)該要明確輸入,輸出的數(shù)據(jù)類型。那么我們應(yīng)該定義符合那個(gè)方法輸入與輸出一致的數(shù)據(jù)類型。
public class Test { //這種數(shù)據(jù)類型可以接受一個(gè)方法 public delegate string MethodDelegate(int i1,int i2); }
好了,我已經(jīng)聲明了和上面Method方法一樣的輸入與輸出類型的一個(gè)數(shù)據(jù)類型了:MethodDelegate。
那么我們就可以用這個(gè)數(shù)據(jù)類型來接受Mehtod方法了,完整代碼如下:
class Program { //這種數(shù)據(jù)類型可以接受一個(gè)方法 public delegate string MethodDelegate(int i1, int i2); /// <summary> /// 我們可以用MethodDelegate聲明一個(gè)變量來接受方法了 /// </summary> public void Test() { MethodDelegate IamMethod = Method; //把下面那個(gè)Method方法賦值給變量了。 var result=IamMethod(1, 2); //然后把這個(gè)變量當(dāng)作方法一樣執(zhí)行即可。 } public string Method(int m, int n) { return ""; } }
在上面第4行:我們用delegate關(guān)鍵字聲明了一種數(shù)據(jù)類型:這種數(shù)據(jù)類型和我們想要接受什么樣方法的輸入輸出類型保持一致就可以了。
那么上面的MethodDelegate就可以接受帶2個(gè)int類型的輸入?yún)?shù)并且返回類型是string的任何方法了。
現(xiàn)在我們發(fā)現(xiàn)委托和int,string是一樣的概念,只不過,int用來接受整數(shù),string用來接受字符串,delegate用來聲明一種數(shù)據(jù)類型接受方法。
上一篇:C#通過創(chuàng)建Windows服務(wù)啟動(dòng)程序的方法詳解
欄 目:C#教程
下一篇:C#設(shè)置軟件開機(jī)自動(dòng)運(yùn)行的方法(修改注冊表)
本文標(biāo)題:C#中的委托使用
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/6387.html
您可能感興趣的文章
- 01-10C#使用Dispose模式實(shí)現(xiàn)手動(dòng)對資源的釋放
- 01-10C#3.0使用EventLog類寫Windows事件日志的方法
- 01-10C#使用windows服務(wù)開啟應(yīng)用程序的方法
- 01-10c# ArrayList的使用方法小總結(jié)
- 01-10C#中查找Dictionary中的重復(fù)值的方法
- 01-10C#使用ADO.Net部件來訪問Access數(shù)據(jù)庫的方法
- 01-10C#使用Mutex簡單實(shí)現(xiàn)程序單實(shí)例運(yùn)行的方法
- 01-10使用Nopcommerce為商城添加滿XX減XX優(yōu)惠券功能
- 01-10C#將圖片存放到SQL SERVER數(shù)據(jù)庫中的方法
- 01-10關(guān)于nancy中的身份驗(yàn)證


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻 器左下角滾動(dòng)新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 04-02jquery與jsp,用jquery
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文