Exemple #1
0
        static void Main(string[] args)
        {
            Publisher p = new Publisher();

            Console.WriteLine(1);
            Subscriber s1 = new Subscriber();
            Subscriber s2 = new Subscriber();

            //挂接事件响应代码
            p.MyEvent += s1.MyMethod;
            p.MyEvent += s2.MyMethod;
            p.MyEvent += s2.anothermethod;


            //委托变量MyEvent前有一个event关键字,
            //所以无法直接调用Publisher类的MyEvent方法
            //以下代码无法通过编译
            //p.MyEvent(100);

            //只能通过Publisher类的公有方法间接地触发事件
            Console.WriteLine("\n通过Publisher对象的公有方法触发事件\n");
            for (int i = 0; i < 10; i++)
            {
                p.FireEvent(new Random().Next(1, 100));
            }

            //p.FireEvent(12);
            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            Publisher p = new Publisher();
            Subscriber s1 = new Subscriber();
            Subscriber s2 = new Subscriber();
            //声明为事件的委托无法直接调用Combine方法
            //以下两句将无法通过编译
            //p.handlers = System.Delegate.Combine(p.handlers, new MyMultiDelegate(s1.MyMethod)) as MyMultiDelegate;
            //p.handlers = System.Delegate.Combine(p.handlers, new MyMultiDelegate(s2.MyMethod)) as MyMultiDelegate;
            //必须使用+=运算符给事件追加委托
            //p.handlers+=new MyMultiDelegate(s1.MyMethod);
            //p.handlers+=new MyMultiDelegate(s2.MyMethod);
            p.handlers += s1.MyMethod;
            p.handlers += s1.MyMethod;
            //声明为事件的委托也不能直接调用,下面这句无法通过编译
            //p.handlers(10);
            //只能通过类的公有方法间接地引发事件
            p.FireEvent();

            Console.ReadKey();
        }
Exemple #3
0
        static void Main(string[] args)
        {
            Publisher  p  = new Publisher();
            Subscriber s1 = new Subscriber();
            Subscriber s2 = new Subscriber();

            //声明为事件的委托无法直接调用Combine方法
            //以下两句将无法通过编译
            //p.handlers = System.Delegate.Combine(p.handlers, new MyMultiDelegate(s1.MyMethod)) as MyMultiDelegate;
            //p.handlers = System.Delegate.Combine(p.handlers, new MyMultiDelegate(s2.MyMethod)) as MyMultiDelegate;
            //必须使用+=运算符给事件追加委托
            //p.handlers+=new MyMultiDelegate(s1.MyMethod);
            //p.handlers+=new MyMultiDelegate(s2.MyMethod);
            p.handlers += s1.MyMethod;
            p.handlers += s1.MyMethod;
            //声明为事件的委托也不能直接调用,下面这句无法通过编译
            //p.handlers(10);
            //只能通过类的公有方法间接地引发事件
            p.FireEvent();

            Console.ReadKey();
        }