建議40 使用event關鍵字為委託施加保護

2021-07-22 07:56:31 字數 1064 閱讀 4631

建議40:使用event關鍵字為委託施加保護

在建議中我們實現了乙個具有通知功能的檔案傳輸類,如下:

class

fileuploader}}

}

像這樣呼叫:

static

void main(string

args)

static

void progress(int

progress)

static

void progressanother(int

progress)

", progress);

}

以上呼叫者**本身是和fileuploader類一起的,這起碼存在兩個問題:

1)如果在main中另起乙個執行緒,該工作執行緒則可以將fileprogress委託鏈置為空:

f1.fileuploaded = null;
2)可以在外部呼叫fileuploaded,如:

f1.fileuploaded(10) ;
這應該是不允許的,因為什麼時候通知呼叫者,應該是fileuploader類自己的職責,而不是呼叫者本身來決定的。event關鍵字正是在這種情況下被提出來的,它為委託加了保護。

public fileuploadedhandler fileuploaded;
改為:

public

event fileuploadedhandler fileuploaded;

這樣,上面提到的幾種情況就會被阻止:

f1.fileuploaded = null

;f1.fileuploaded =progress;

f1.fileuploaded = progressanother;

以上**將編譯不通過:

事件「mytest.fileuploader.fileuploaded」只能出現在 += 或 -= 的左邊(從型別「mytest.fileuploader」中使用時除外)

**:《編寫高質量**改善c#程式的157個建議》陸敏技

event關鍵字存在的必要

有了 為什麼還要事件?是否 和事件一定要 雙生 事件的作用是 縮小客戶端使用 的許可權 只能增建 刪除註冊。而不能invoke或者重置 如果採用私有化 並且自定義訪問方法也可以做到這點。真是這個機制太常用了,增加乙個event關鍵字可以少打一點 如果客戶端需要再更加大的範圍使用類的 則不用事件即可。...

event關鍵字存在的必要

有了 為什麼還要事件?是否 和事件一定要 雙生 事件的作用是 縮小客戶端使用 的許可權 只能增建 刪除註冊。而不能invoke或者重置 如果採用私有化 並且自定義訪問方法也可以做到這點。真是這個機制太常用了,增加乙個event關鍵字可以少打一點 如果客戶端需要再更加大的範圍使用類的 則不用事件即可。...

C 中關鍵字event的作用

c 使用者可能會發現,event關鍵字有時候可有可無。public static int myeventhandler public delegate int eventhandler class myclass1 如上原始碼,event關鍵字有無的效果一樣。那麼event關鍵字的作用到底是什麼呢?...