委託系列08 委託和事件的區別

2022-09-20 13:39:06 字數 1615 閱讀 3751

&emsp: 案例:通過委託和事件實現相同的動作

**:

public class cat

//方式二:

miaoaction?.invoke();//?. 如果不為null ,就執行後面的動作 }}

console.writeline("************************this is  delegate****************************");

**:

public class cat

//方式二:

miaoaction?.invoke();//?. 如果不為null ,就執行後面的動作

}//事件

public event action miaoeventhanlder = null;

/// /// 這個方法僅僅只是miao一聲

/// 引發的動作---可以放到多播委託中去

///

public void miaoenvent()

miaoenvent", this.gettype().name);

miaoeventhanlder?.invoke();//?. 如果不為null ,就執行後面的動作 }}

委託和事件的實現效果一致。

從上面的案例可以看得出來,委託和事件都能實現同樣的效果,那他們之間有什麼區別呢?

下面有個childcat類,繼承cat類:

public class childcat : cat

}

在上面的show方法中,分別執行父類的多播委託和事件

從上圖可以看出,事件不能在它的子類執行。

分別在其他類(非cat類的繼承類)中,執行多播委託和事件。

執行多播委託:

執行事件:

從上圖可以得知:

在其他類中,可以執行多播委託,不能執行事件。

既然委託和事件都能實現同樣的效果,那為什麼還要再出現乙個事件呢?

主要是從安全性考慮。事件只能在宣告它的類裡面呼叫,其他類包括子類都不可以呼叫。這樣就可以呼叫它只能在宣告它的類裡面,外部方法不會破壞它的執行邏輯。

委託和事件的區別

首先,我們知道委託和事件都可以用來呼叫跟自己方法簽名一樣的方法。容易混淆大家的地方大多在於這兩者之間的區別。從我們使用委託delegate和事件event上的主要有兩大區別 如表1所示 表1 委託和事件的區別 序號區別 委託事件 1是否可以使用 來賦值是否 2是否可以在類外部進行呼叫是否 3是否是乙...

委託和事件的區別

首先,我們知道委託和事件都可以用來呼叫跟自己方法簽名一樣的方法。容易混淆大家的地方大多在於這兩者之間的區別。從我們使用委託delegate和事件event上的主要有兩大區別 如表1所示 表1 委託和事件的區別 序號區別 委託事件 1是否可以使用 來賦值是否 2是否可以在類外部進行呼叫是否 3是否是乙...

事件和委託 委託和事件區別 不斷更新

01 簡單的委託 那委託需要承載哪些資訊呢?首先,它儲存了方法名,還有引數列表 方法簽名 以及返回的型別。比如 delegate string 返回型別 processdelegate int i 這就是乙個委託的定義。藍色部分是宣告委託的關鍵字,紅色部分是返回的型別,而黑色部分是委託的型別名,和乙...