grubiai tariant delegatas leidzia metoda naudoti kaip reiksme, t.y. perduoti
per parameterus i kita metoda, grazinti (return) is metodo ir t.t. delegatai
yra type-safe, t.y. jie turi atitikti signatura metodo i kuri jie
reprezentuos.
Eventai yra tiesiog palengvinimas programuotojui, compileris tai pavercia
combine/remove delegate operacijas.
pvz is Jeffrey Richter "CLR via C#" knygos
public event EventHandler<NewMailEventArgs> NewMail;
When the C# compiler compiles the line above, it translates this single line
of source code
into the following three constructs:
// 1. A PRIVATE delegate field that is initialized to null
private EventHandler<NewMailEventArgs> NewMail = null;
// 2. A PUBLIC add_Xxx method (where Xxx is the Event name)
// Allows methods to register interest in the event.
public void add_NewMail(EventHandler<NewMailEventArgs> value) {
// The loop and the call to CompareExchange is all just a fancy way
// of adding a delegate to the event in a thread-safe way
EventHandler<NewMailEventArgs>prevHandler;
EventHandler<NewMailEventArgs> newMail = this.NewMail;
do {
prevHandler = newMail;
EventHandler<NewMailEventArgs>newHandler =
(EventHandler<NewMailEventArgs>) Delegate.Combine(prevHandler, value);
newMail = Interlocked.CompareExchange<EventHandler<NewMailEventArgs>>(
ref this.NewMail, newHandler, prevHandler);
} while (newMail != prevHandler);
}
// 3. A PUBLIC remove_Xxx method (where Xxx is the Event name)
// Allows methods to unregister interest in the event.
public void remove_NewMail(EventHandler<NewMailEventArgs> value) {
// The loop and the call to CompareExchange is all just a fancy way
// of removing a delegate from the event in a thread-safe way
EventHandler<NewMailEventArgs> prevHandler;
EventHandler<NewMailEventArgs> newMail = this.NewMail;
do {
prevHandler = newMail;
EventHandler<NewMailEventArgs> newHandler =
(EventHandler<NewMailEventArgs>) Delegate.Remove(prevHandler, value);
newMail = Interlocked.CompareExchange<EventHandler<NewMailEventArgs>>(
ref this.NewMail, newHandler, prevHandler);
} while (newMail != prevHandler);
}
"Dziedukas" <dejau@gmail.com> wrote in message
news:jumij5$qv8$1@trimpas.omnitel.net...
> ECMA atsisiunciau - reikes paskaityti. O kuo tie eventai skiriasi nuo
> metodo? Nes aprasant (deleguojant) nurodoma ir gautine reiksme (void, int,
> ..). Cia gal kazkas panasaus i interfeisa?? Ta prasme, kad naudojamas kaip
> sablonas?? Tik ar is jo galima ka isvesti tai nezinau.
> "AndriusF" <MORESPAMandriusFL@gmail.com> wrote in message
> news:julsna$4mv$1@trimpas.omnitel.net...
>> Eventas yra klases narys,taip kaip metodas, property ar field`as.
>> delegate yra tipas (nuoroda i metoda)
>> Eventas gali buti tik deleagte tipo.
>>
>> Siulau pasiskaityti ECMA-334 skyrius 8.7.5 ir 17.7.
>>
>> An event is a member that enables an object or class to provide
>> notifications. A class defines an event by
>> providing an event declaration (which resembles a field declaration,
>> though with an added event keyword)
>> and an optional set of event accessors. The type of this declaration
>> shall be a delegate type.
>>
>> a.
>>
>>
>> "Dziedukas" <dejau@gmail.com> wrote in message
>> news:julek0$l2f$1@trimpas.omnitel.net...
>>> Sveiki,
>>>
>>> bandau toliau mokytis C# ir susiduriau su event'ais. Mokausi is anglisku
>>> knygu ir kazkaip ar galva perkaito, ar kas pasidare, niekaip neikertu.
>>> Gal kas galetumet paaiskint?
>>>
>>> Dekui
>>>
>>
>>
>
>