C#语言有很多值得学习的地方,这里我们主要介绍C#多路广播,包括介绍多路代理MSDN上翻译成C#多路广播等方面。
一个代理同时代理几个方法。就是我们前面说到的那样,你去建造房子,现在要不仅仅是建造住宅,还的去建造花园等等其它建筑物。可是它们都是在建造房子,传递的参数也相同返回值的类型也相同都是房屋。那么我们为什么不找一个代理人来完成这样的任务呢?把这些事物交由他一个人来完成不是可以节省我们很多的时间和金钱。是的我们可以那样做System。MulticastDelegate 实际上在.net framework中你还可以找到这个类,多路代理MSDN上翻译成C#多路广播。事实上它还重载了操作符+=。其实C#多路广播和单路代理在使用方法上区别不大。你可以看下面的例子。
- using System;
- namespace Multi_castDelegate
- {
- /// <summary>
- /// Summary description for Class1.
- /// </summary>
- class MyClassDelegate
- {
- /// <summary>
- /// The main entry point for the application.
- /// </summary>
- public delegate string IntDelegate(string s);
- }
- }
- using System;
- namespace Multi_castDelegate
- {
- /// <summary>
- /// Summary description for MyImplementingClass.
- /// </summary>
- public class MyClass
- {
- public MyClass()
- {
- }
- public static string WriteString(string s)
- {
- Console.WriteLine("Writing string");
- return "null";
- }
- public static string logString(string s)
- {
- Console.WriteLine("loging string");
- return "null";
- }
- public static string TransmitString(string s)
- {
- Console.WriteLine("Transmitting string");
- return "null";
- }
- }
- }
- The Main class:
- using System;
- using System.Threading;
- namespace Multi_castDelegate
- {
- /// <summary>
- /// Summary description for Test.
- /// </summary>
- public class Test
- {
- public static void Main()
- {
- MyClassDelegate.StringDelegate
- Writer,Logger,Transmitter;
- MyClassDelegate.StringDelegate
- myDelegate;
- Writer=new
- MyClassDelegate.StringDelegate(MyClass.WriteString);
- /// calling Writer
- Writer("hello i am Writer just acting like Single cast");
- Logger=new MyClassDelegate.StringDelegate(MyClass.logString);
- ///calling Logger
- Logger("hello i am Logger just acting like Single-cast");
- Transmitter=new MyClassDelegate.StringDelegate(MyClass.TransmitString);
- ///calling Transmitter
- Transmitter("hello i am Transmitter just acting like Single-cast");
- ///here mydelegate used the Combine method of System.MulticastDelegate
- ///and the delegates combine
- myDelegate=(MyClassDelegate.StringDelegate)System.Delegate.
Combine(Writer,Logger);- myDelegate("used Combine");
- ///here Transmitter is also added using the overloaded form of Combine
- myDelegate+=Transmitter;
- myDelegate("Using Overloaded Form");
- ///now using the Remove method
- myDelegate=(MyClassDelegate.StringDelegate)System.Delegate.
Remove(myDelegate,Writer);- myDelegate("Without Writer");
- ///overloaded Remove
- myDelegate-=Transmitter;
- myDelegate("Without Transmitter");
- System.Threading.Thread.Sleep(2300);
- }
- }
- }
面的例子重点是看那两个已经重载的操作符。"-="和"+="。通过上面的例子,你可以清楚的看到C#多路广播是如何一次代理多个方法的。当然你也可以删除掉那些你不想要的用"-="操作符就可以了。
【编辑推荐】