C#基礎系列--C#中委託與事件(一)
我們都知道,C#中有“介面”這個概念,所謂的“介面”就是定義一套標準,然後由實現類來具體實現其中的方法,所以說“介面,是一組類的抽象”。同樣道理,我們可以將“委託”理解為“方法的抽象”,也就是說定義一個方法的模板,至於這個方法具體是怎麼樣的,就由方法自己去實現。
我們知道介面的最大好處就是可以實現多型,同理,“委託”是可以實現方法的多型,當我們想呼叫某個具體方法的時候,我們不直接呼叫這個方法,而是去呼叫這個委託。當然,我們必須在具體方法和委託之間建立某種關聯。
定義和使用委託分三個步驟:
1、委託宣告。2、委託例項化。3、委託呼叫。
一、定義委託
定義委託的語法如下:
<訪問修飾符> delegate 返回型別 委託名();
定義委託和定義方法很相似,委託沒有具體的實現體,由關鍵字delegate宣告,直接以分號結束。委託能夠代表什麼樣的方法,由它的返回值型別和引數列表決定。如下定義如下委託:
public delegate void MyDelegate(string name);
那麼使用MyDelegate委託代表的只可以是沒有返回值,引數為一個字串的方法。
二、例項化委託
定義了委託之後,如何使用委託代表方法執行呢?首先要例項化委託。例項化委託就是將其指向某個方法,即呼叫委託的建構函式,並將相關聯的方法作為引數傳遞。
如:如一個方法
private int Add(int num1,int num2)
{
return(num1+num2);
}
委託宣告瞭以後,就可以象類一樣進行例項化,例項化時把要引用的方法(如:Add)做為引數,這樣委託和方法就關聯了起來,就可以用委託來引用方法了。
委託和所引用的方法必須保持一致:
1、引數個數、型別、順序必須完全一致。
2、返回值必須一致。
3、傳入的方法中不能帶引數,只寫方法名。
三、呼叫委託
要呼叫委託的方法用委託的物件加引數,如果引數為空,也要加小括號。
為方法建立一個委託,然後立即通過這個委託呼叫該方法並沒有太大意義,因為直接呼叫方法更簡單。動態呼叫方法時,委託才真正顯示出它的效用。
using System;
delegate int Operand(int a, int b); //第一步:委託宣告
class Class1
{
static void Main(string[]args)
{
Class1 c1 = new Class1();
Operand ope = new Operand(c1.Add);
//委託例項化,注意引數是要使用的引數名,且不帶括號
Console.WriteLine(ope(10, 20)); //委託呼叫,呼叫委託的方法用
委託的物件加引數
Console.ReadLine();
}
//定義一個方法,求兩個加數的和
private int Add(int num1, int num2)
{
return (num1 + num2);
}
}
我們知道介面的最大好處就是可以實現多型,同理,“委託”是可以實現方法的多型,當我們想呼叫某個具體方法的時候,我們不直接呼叫這個方法,而是去呼叫這個委託。當然,我們必須在具體方法和委託之間建立某種關聯。
定義和使用委託分三個步驟:
1、委託宣告。2、委託例項化。3、委託呼叫。
一、定義委託
定義委託的語法如下:
<訪問修飾符> delegate 返回型別 委託名();
定義委託和定義方法很相似,委託沒有具體的實現體,由關鍵字delegate宣告,直接以分號結束。委託能夠代表什麼樣的方法,由它的返回值型別和引數列表決定。如下定義如下委託:
public delegate void MyDelegate(string name);
那麼使用MyDelegate委託代表的只可以是沒有返回值,引數為一個字串的方法。
二、例項化委託
定義了委託之後,如何使用委託代表方法執行呢?首先要例項化委託。例項化委託就是將其指向某個方法,即呼叫委託的建構函式,並將相關聯的方法作為引數傳遞。
如:如一個方法
private int Add(int num1,int num2)
{
return(num1+num2);
}
委託宣告瞭以後,就可以象類一樣進行例項化,例項化時把要引用的方法(如:Add)做為引數,這樣委託和方法就關聯了起來,就可以用委託來引用方法了。
委託和所引用的方法必須保持一致:
1、引數個數、型別、順序必須完全一致。
2、返回值必須一致。
3、傳入的方法中不能帶引數,只寫方法名。
三、呼叫委託
要呼叫委託的方法用委託的物件加引數,如果引數為空,也要加小括號。
為方法建立一個委託,然後立即通過這個委託呼叫該方法並沒有太大意義,因為直接呼叫方法更簡單。動態呼叫方法時,委託才真正顯示出它的效用。
using System;
delegate int Operand(int a, int b); //第一步:委託宣告
class Class1
{
static void Main(string[]args)
{
Class1 c1 = new Class1();
Operand ope = new Operand(c1.Add);
//委託例項化,注意引數是要使用的引數名,且不帶括號
Console.WriteLine(ope(10, 20)); //委託呼叫,呼叫委託的方法用
委託的物件加引數
Console.ReadLine();
}
//定義一個方法,求兩個加數的和
private int Add(int num1, int num2)
{
return (num1 + num2);
}
}
相關文章
- C#基礎系列--C#中委託與事件(三)C#事件
- C#中委託的呼叫C#
- C#委託與事件C#事件
- C# - 委託與事件C#事件
- C# 之委託與事件C#事件
- 詳解C#委託與事件C#事件
- C#基礎系列:委託和設計模式(2)C#設計模式
- C#程式設計之委託與事件(一)C#程式設計事件
- C# 事件委託C#事件
- C# 委託事件C#事件
- C#基礎:泛型委託C#泛型
- C#基礎委託回顧C#
- C#基礎教程:事件C#事件
- C# 事件 vs 委託C#事件
- c# 委託和事件C#事件
- 詳解C#委託和事件(一)C#事件
- C#基礎系列:委託實現簡單設計模式(1)C#設計模式
- C# 從1到Core--委託與事件C#事件
- C#程式設計之委託與事件(二)C#程式設計事件
- C#:委託和自定義事件C#事件
- C# 中的委託和事件C#事件
- 詳解C#基礎之委託非同步C#非同步
- 詳解C#委託,事件與回撥函式C#事件函式
- 重學c#系列——c# 託管和非託管資源(三)C#
- 重學c#系列——c# 託管和非託管資源與程式碼相關(四)C#
- 詳解C#委託和事件(二)C#事件
- C#中的委託和事件(續)C#事件
- C#基礎系列:再也不用擔心面試官問我“事件”了C#面試事件
- C#快速入門教程(17)—— 委託、事件與Lambda表示式C#事件
- C#規範整理·泛型委託事件C#泛型事件
- C# 委託,事件和Lambda表示式 (轉)C#事件
- c#基礎C#
- C#基礎系列:序列化效率比拼C#
- zt 對C#下函式,委託,事件的一點理解!C#函式事件
- C#委託C#
- C# 自定義事件和委託(精彩轉載)C#事件
- C#基礎之yield與SingletonC#
- C#基礎——abstractC#