宣告了一個代理方法,沒有引數。
public delegate void FileChangeDelegate();
呼叫的地方
private void RegisterFileWatch(FileReadRequest request, FileChangeDelegate onChanged)
{
FileWatch.Changed -= new FileSystemEventHandler(onChanged); //這里
}
//new FileSystemEventHandler需要這樣引數的方法代理(object source, FileSystemEventArgs e)
//有沒有辦法進一步包裝下,讓傳入的onChanged不需要定義引數?
uj5u.com熱心網友回復:
你這個寫法不僅僅是麻煩,而且物件(邏輯)也不對。首先看傳統的有完整方法宣告的注冊、注銷方法:
private void test(object sender, EventArgs e)[/code]這里 c# 編譯器認識方法是一個靜態 method 物件。
{
cs.MessageReceived -= Cs_MessageReceived;
}
[code=csharp]private void Cs_MessageReceived(object sender, MessageReceivedEventArgs r)
{
.........
}
而動態產生的委托物件,則需要你的代碼手動保存,例如:
Action<object, EventArgs> csv;
private void test1(object sender, EventArgs e)
{
csv = new Action<object, EventArgs>((s, arg) =>
{
..........
});
cs.MessageReceived += csv;
}
private void test2(object sender, EventArgs e)
{
if (csv != null)
cs.MessageReceived -= csv;
}
這里,你要先把委托宣告為物件,然后用“準確的物件實體”來注冊、注銷。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/19451.html
標籤:C#
上一篇:C#多執行緒專案實用問題
下一篇:WEBAPI中使用 (HttpContextBase)Request.Properties["MS_HttpContext"]出錯
