多播委托(multicast delegate)
2004-11-23 12:42
363 查看
还是老规矩,先看代码:)
using System;
class MulticastTester
delegate void Greeting();
public static void SayThankYou()
Console.WriteLine("Thank you!");
}
public static void SayGoodMorning()
Console.WriteLine("Good morning!");
}
public static void SayGoodnight()
Console.WriteLine("Goodnight");
}
public static void Main()
Greeting myGreeting = new Greeting(SayThankYou);
Console.WriteLine("My single greeting:");
myGreeting();
Greeting yourGreeting = new Greeting(SayGoodMorning);
Console.WriteLine("\nYour single greeting:");
yourGreeting();
Greeting ourGreeting = myGreeting + yourGreeting;
Console.WriteLine("\nOur multicast greeting:");
ourGreeting();
ourGreeting += new Greeting(SayGoodnight);
Console.WriteLine("\nMulticast greeting which includes Goodnight:");
ourGreeting();
ourGreeting = ourGreeting - yourGreeting;
Console.WriteLine("\nMulticast greeting without your greeting:");
ourGreeting();
ourGreeting -= myGreeting;
Console.WriteLine("\nSingle greeting without your greeting and my greeting:");
ourGreeting();
}
}
在MulticastTester类的第一个语句就是我们的委托,跟上次的委托是一样的定义方法,只是这次的委托Greeting没有返回值[1]也没有参数,其实想想也知道Greeting就只是一个动作而已:)
然后有三个静态方法,说谢谢,说早安,说晚安。等待我们用委托来封装。
在Main()方法中,我们首先用一个委托myGreeting封装了SayThankYou,然后用另一个委托yourGreeting封装了SayGoodMorning,这跟我们前面讲的委托是一样的。
第三个ourGreeting并没有明显地封装一个方法,而是把前面两个委托加了起来。这就是我们这次的主题——多播委托。这样一加,ourGreeting就封装了所加委托封装的所有方法。
第四个委托还是我们的ourGreeting,但是它又封装了一个新的方法SayGoodNight,并使用了操作符+=,这时候我们的ourGreeting封装了三个方法。
那我突然后悔了,要除去一个方法怎么办?那么就请看我们第五个和第六个委托(其实都是ourGreeting,呵呵),使用两种办法除去方法。
经过我的测试,ourGreeting = ourGreeting - new Greeting(SayThankYou)这样也是可以多播委托中的方法的。
[1]多播委托必须返回void
using System;
class MulticastTester
delegate void Greeting();
public static void SayThankYou()
Console.WriteLine("Thank you!");
}
public static void SayGoodMorning()
Console.WriteLine("Good morning!");
}
public static void SayGoodnight()
Console.WriteLine("Goodnight");
}
public static void Main()
Greeting myGreeting = new Greeting(SayThankYou);
Console.WriteLine("My single greeting:");
myGreeting();
Greeting yourGreeting = new Greeting(SayGoodMorning);
Console.WriteLine("\nYour single greeting:");
yourGreeting();
Greeting ourGreeting = myGreeting + yourGreeting;
Console.WriteLine("\nOur multicast greeting:");
ourGreeting();
ourGreeting += new Greeting(SayGoodnight);
Console.WriteLine("\nMulticast greeting which includes Goodnight:");
ourGreeting();
ourGreeting = ourGreeting - yourGreeting;
Console.WriteLine("\nMulticast greeting without your greeting:");
ourGreeting();
ourGreeting -= myGreeting;
Console.WriteLine("\nSingle greeting without your greeting and my greeting:");
ourGreeting();
}
}
在MulticastTester类的第一个语句就是我们的委托,跟上次的委托是一样的定义方法,只是这次的委托Greeting没有返回值[1]也没有参数,其实想想也知道Greeting就只是一个动作而已:)
然后有三个静态方法,说谢谢,说早安,说晚安。等待我们用委托来封装。
在Main()方法中,我们首先用一个委托myGreeting封装了SayThankYou,然后用另一个委托yourGreeting封装了SayGoodMorning,这跟我们前面讲的委托是一样的。
第三个ourGreeting并没有明显地封装一个方法,而是把前面两个委托加了起来。这就是我们这次的主题——多播委托。这样一加,ourGreeting就封装了所加委托封装的所有方法。
第四个委托还是我们的ourGreeting,但是它又封装了一个新的方法SayGoodNight,并使用了操作符+=,这时候我们的ourGreeting封装了三个方法。
那我突然后悔了,要除去一个方法怎么办?那么就请看我们第五个和第六个委托(其实都是ourGreeting,呵呵),使用两种办法除去方法。
经过我的测试,ourGreeting = ourGreeting - new Greeting(SayThankYou)这样也是可以多播委托中的方法的。
[1]多播委托必须返回void
相关文章推荐
- 复习概率中,明天过后就解放了!
- 你偷走你的今天了吗?(转)
- 优友地带,怎么定位这种新形式的网上交流呢
- 终于搞定了mysql!
- 生病
- vCalendar文件格式解析
- 如何在SQL Server中从触发器中获取引发该触发器的SQL语句内的相应参数?
- 维基百科 -- 百科全书的共产主义?
- struts+hibernate使用总结
- 如何使用USE_CONCAT提示
- Mime-Type资料
- .NET Framework 格式设置表达式
- 中间件
- 今日加入博客一族!
- 使用预编译头文件加快C++语言编译速度
- PHP书籍推荐
- Exchange开发(六) ExchangeHelper类
- ADO.NET 開發高手線上教學課程 视频教程 vb讲解
- Slow shutdown of Windows 2003 Server after installing Exchange 2003 Server
- Slow shutdown of WindoServer after installing Exchange 2003 Server