事件初步理解多播委託為委託列表
static action<
int> all;
static action<
int> addthenprint = i =
>
;static action<
int> print = i =
> console.
writeline
(i);..
.main(.
.)
多播委託,可以理解為乙個列表,只要其中元素函式簽名一致,就可以記錄在一起。多播委託就是多個委託的列表。
報社發報案例
class
person
public
person
(string name)
public
void
setnews*****
(news***** news*****)
}class
publisher
public
person
(string name)
public
void
sendnews*****
(news***** news*****)
}class
news*****
public
string content
}class
program);
}}
class
publisher
public
person
(string name)
public list persons =
newlist
<
person
>()
;public
void
sendnews*****
(news***** news*****)
}class
program);
}}
class
company
public
company
(string name)
public
void
setnews*****
(news***** news*****)
}
public list persons =
newlist
<
person
>()
;public list companies=
newlist
<
company
>()
;public
void
sendnews*****
(news***** news*****)
}
增加介面程式設計改善案例inte***ce
inews*****
class
person
:inews*****
public
person
(string name)
public
void
setnews*****
(news***** news*****)
}class
company
:inews*****
public
company
(string name)
public
void
setnews*****
(news***** news*****)
}class
publisher
public
person
(string name)
public list subscribers=
newlist
<
inews*****
>()
;// 通過介面呼叫實現介面的類
public
void
sendnews*****
(news***** news*****)
}
再用委託型別對上例進行改善//去掉介面
class
publisher
public
person
(string name)
// public listsubscribers= new list();
// 使用委託
public
delegate
void
_subscribers
(news***** news*****)
;// 委託是定義乙個類,再實現
public _subscribers subscribers
public
void
sendnews*****
(news***** news*****)
}class
program);
}}
//去掉介面
class
publisher
public
person
(string name)
// public listsubscribers= new list();
// 使用委託
// public delegate void _subscribers(news***** news*****);
// 委託是定義乙個類,再實現
// public _subscribers subscribers
public action subscribers =
null
;// 預設應該為null
public
void
sendnews*****
(news***** news*****)
}
class
publisher
}}
委託鏈的異常class
publisher
catch
(exception ex)
}subscribers
(news*****);}
}}
提供封裝,程式更健壯class
publisher
catch
(exception ex)
}subscribers
(news*****);}
}}
publisher.
subscribers
(null);
// 外部不能直接呼叫event委託
提供更加抽象的事件用法class
publisher1
catch
(exception ex)
}subscribers
(news*****);}
}}
class
person
public
person
(string name)
public
void
setnews*****
(object sender,
news***** news*****)..
.this
.news***** = news*****;
}}
system.eventargs傳入引數class
publisherargs
:system.eventargs
public
news***** news*****
}
class
publisher1
catch
(exception ex)
}subscribers
(news*****);}
}}
class
person
public
person
(string name)
public
void
setnews*****
(object sender,
publisherargs args)}}
// 許多地方簽名要改為args.news*****
使用系統預定義的泛型委託public
delegate
void
eventhandler
<
t>
(object sender,
t e)
where t : eventargs;
add、remove關鍵字public
event eventhandler subscribers
remove
// 與+= 、-=效果類似
}
C Observer設計模式(委託 事件)
observer設計模式中主要包括如下兩類物件 subject 監視物件,它往往包含著其他物件所感興趣的內容。在本範例中,熱水器就是乙個監視物件,它包含的其他物件所感興趣的內容,就是temprature欄位,當這個欄位的值快到100時,會不斷把資料發給監視它的物件。observer 監視者,它監視s...
c 工廠模式 ,委託 ,事件。
有些時間 不用 c 了 想 寫 委託 和 事件 又會 卡下 之前也沒認真總結過。乾脆 做個小結 什麼是委託 狹義,不安全函式的指標。不安全在 任何地方都可以呼叫委託物件。實際上委託物件才是函式的指標,而delegate只是乙個語法 什麼是事件 狹義,安全的函式指標,安全在 只允許包含事件的類,的內部...
c 11委託 事件 反射
using system using system.collections.generic using system.linq using system.text namespace 11 using system using system.collections.generic using sys...