Delegate, Event
Delegate其实就相当于C++/C里面的函数指针.用法如下:
1.最常规的使用
class Program
{
public delegate void NumberChangedEventHandler(int number);
class Publisher
{
public NumberChangedEventHandler NumberChanged;
}
class Subscriber
{
public void OnNumberChanged(int number)
{
string message = "New value is " + number;
Console.WriteLine(message);
}
}
static void Main(string[] args)
{
Publisher pub = new Publisher();
Subscriber sub1 = new Subscriber();
Subscriber sub2 = new Subscriber();
pub.NumberChanged += new NumberChangedEventHandler(sub1.OnNumberChanged);
pub.NumberChanged += new NumberChangedEventHandler(sub2.OnNumberChanged);
pub.NumberChanged(3);
Console.WriteLine("over");
}
}
2.直接当成函数指针用
class Program
{
public delegate void NumberChangedEventHandler(int number);
class Publisher
{
public NumberChangedEventHandler NumberChanged;
}
class Subscriber
{
public void OnNumberChanged(int number)
{
string message = "New value is " + number;
Console.WriteLine(message);
}
}
static void Main(string[] args)
{
Publisher pub = new Publisher();
Subscriber sub1 = new Subscriber();
pub.NumberChanged = sub1.OnNumberChanged;
pub.NumberChanged(3);
}
}
3.异步调用
class Program
{
public delegate void NumberChangedEventHandler(int number);
class Publisher
{
public NumberChangedEventHandler NumberChanged;
}
class Subscriber
{
public void OnNumberChanged(int number)
{
string message = "New value is " + number;
Console.WriteLine(message);
}
}
static void Main(string[] args)
{
Publisher pub = new Publisher();
Subscriber sub1 = new Subscriber();
pub.NumberChanged += new NumberChangedEventHandler(sub1.OnNumberChanged);
pub.NumberChanged.BeginInvoke(3, null, null);
}
}
以上所述为怎么样,但如何用好,即将这个机制用在什么Context中,确又是另一门学问
Event就是delegate的一个具体应用,但是它的应用是比较简单的,只是加上了限制:此delegate(即event)只能在本类中调用