建議40:使用event關鍵字為委託施加保護
在建議中我們實現了乙個具有通知功能的檔案傳輸類,如下:
class像這樣呼叫:fileuploader}}
}
static以上呼叫者**本身是和fileuploader類一起的,這起碼存在兩個問題:void main(string
args)
static
void progress(int
progress)
static
void progressanother(int
progress)
", progress);
}
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關鍵字的作用到底是什麼呢?...