&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 這就是乙個委託的定義。藍色部分是宣告委託的關鍵字,紅色部分是返回的型別,而黑色部分是委託的型別名,和乙...