Chapter 16 Quick Reference
To Do this
Declare a
delegate type.
Write the keyword delegate, followed by the return type, followed by the
name of the delegate type, followed by any parameter types. For example:
delegate void Tick();
Invoke a
delegate.
Use the same syntax as a method call. For example:
Tick m;
...
m();
Create an
instance of a
delegate.
Use the same syntax you use for a class or struct: write the keyword new,
followed by the name of the type (the name of the delegate), followed by
the argument between parentheses. The argument must be a method
whose signature exactly matches the signature of the delegate. For
example:
delegate void Tick();
private void Method() { ... }
...
Tick m = new Tick(this.Method);
Declare an
event.
Write the keyword event, followed by the name of the type (the type must
be a delegate type), followed by the name of the event. For example:
delegate void TickHandler();
class Ticker
{
public event TickHandler Tick;
}
Subscibe to an
event.
Create a delegate instance (of the same type as the event), and attach the
delegate instance to the event by using the += operator. For example:
class Clock
{
...
public void Start()
{
ticker.Tick += new TickHandler
(this.RefreshTime);
To Do this
}
private void RefreshTime()
{
...
}
private Ticker ticker = new Ticker();
}
You can also get the compiler to automatically generate the new delegate
by just specifying the subscribing method:
public void Start()
{
ticker.Tick += this.RefreshTime;
}
Unsubscribe
from an event.
Create a delegate instance (of the same type as the event), and detach the
delegate instance from the event by using the –= operator. For example:
class Clock
{
...
public void Stop()
{
ticker.Tick - = new TickHandler
(this.RefreshTime);
}
private void RefreshTime()
{
...
}
private Ticker ticker = new Ticker();
}
Or:
public void Stop()
{
ticker.Tick -= this.RefreshTime;
}
Raise an Use parentheses exactly as if the event were a method. You must supply
To Do this
event. arguments to match the type of the event. Don't forget to check whether
the event is null. For example:
class Ticker
{
public event TickHandler Tick;
...
private void Notify()
{
if (this.Tick != null)
{
this.Tick();
}
}
...
}