C#中的委托使用
從今天開始寫關于C#的系列文章,本篇文章主要講解C#中的委托使用。
委托其實就是一種數(shù)據(jù)類型,和int,string是一樣的概念。
如果要把一個字符串賦值給一個變量,用string聲明一個變量即可。如果要把一個方法賦值給一個變量,那么用什么關鍵字呢?當然就是用委托了,所以用委托聲明的變量就可以接受一個方法了,之后那個變量就可以像方法一樣執(zhí)行。
下面開始詳細介紹:
先看一段代碼:
static void Main(string[] args)
{
int i; //可以接受一個整數(shù)的變量
string str; //可以接受一個字符串的變量
}
在Main方法內聲明了2個變量:i和str。大家都很熟悉的代碼,變量i表明它可以接受一個整數(shù),變量str表明它可以接受一個字符串。
那么如果我想聲明一個變量既可以接受整數(shù)又可以接受字符串,那該用什么數(shù)據(jù)類型來聲明這樣的變量呢?
答案很簡單:用class。
public class MyClass
{
public int i { get; set; } //接受整數(shù)
public string str { get; set; } //接受字符串
}
那么我們就創(chuàng)建了一種數(shù)據(jù)類型:MyClass,用它聲明的變量可以同時接受一個整數(shù)和一個字符串。
如下:
static void Main(string[] args)
{
MyClass obj = new MyClass();
obj.i =1;
obj.str ="我是字符串";
}
現(xiàn)在問題來了:我想要一種數(shù)據(jù)類型可以聲明一個變量用于接受一個方法。
既然這種數(shù)據(jù)類型要接受一個方法,那我們先看看方法長什么樣:
public string Method(int m,int n)
{
return "";
}
上面的Method方法最主要的特點就是這個方法的輸入?yún)?shù)數(shù)據(jù)類型與輸出的數(shù)據(jù)類型。
通常我們會調用各種方法,調用方法前我們會確定方法的輸入?yún)?shù)的數(shù)據(jù)類型和方法輸出的數(shù)據(jù)類型,至于方法的主體我們通常不關心,方法的主體由方法編程人員去完成即可。
所以我們編寫一個方法,調用一個方法前都要明確的方法的輸入輸出數(shù)據(jù)類型。
對于上面Method方法的輸入數(shù)據(jù)類型為2個整數(shù),輸出的是一個字符串。
現(xiàn)在我們要聲明一個變量來接受這個方法,那么這個變量的數(shù)據(jù)類型也應該要明確輸入,輸出的數(shù)據(jù)類型。那么我們應該定義符合那個方法輸入與輸出一致的數(shù)據(jù)類型。
public class Test
{
//這種數(shù)據(jù)類型可以接受一個方法
public delegate string MethodDelegate(int i1,int i2);
}
好了,我已經(jīng)聲明了和上面Method方法一樣的輸入與輸出類型的一個數(shù)據(jù)類型了:MethodDelegate。
那么我們就可以用這個數(shù)據(jù)類型來接受Mehtod方法了,完整代碼如下:
class Program
{
//這種數(shù)據(jù)類型可以接受一個方法
public delegate string MethodDelegate(int i1, int i2);
/// <summary>
/// 我們可以用MethodDelegate聲明一個變量來接受方法了
/// </summary>
public void Test()
{
MethodDelegate IamMethod = Method; //把下面那個Method方法賦值給變量了。
var result=IamMethod(1, 2); //然后把這個變量當作方法一樣執(zhí)行即可。
}
public string Method(int m, int n)
{
return "";
}
}
在上面第4行:我們用delegate關鍵字聲明了一種數(shù)據(jù)類型:這種數(shù)據(jù)類型和我們想要接受什么樣方法的輸入輸出類型保持一致就可以了。
那么上面的MethodDelegate就可以接受帶2個int類型的輸入?yún)?shù)并且返回類型是string的任何方法了。
現(xiàn)在我們發(fā)現(xiàn)委托和int,string是一樣的概念,只不過,int用來接受整數(shù),string用來接受字符串,delegate用來聲明一種數(shù)據(jù)類型接受方法。
相關文章
WinForm自定義函數(shù)FindControl實現(xiàn)按名稱查找控件
這篇文章主要介紹了WinForm自定義函數(shù)FindControl實現(xiàn)按名稱查找控件,需要的朋友可以參考下2014-08-08
C#使用linq語句查詢數(shù)組中以特定字符開頭元素的方法
這篇文章主要介紹了C#使用linq語句查詢數(shù)組中以特定字符開頭元素的方法,涉及C#使用linq進行查詢的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-04-04

