zoukankan      html  css  js  c++  java
  • C#:实现接口中定义的事件

    public delegate void TestDelegate();   // delegate declaration
    
     public interface ITestInterface
     {
         event TestDelegate TestEvent;
         void FireAway();
     }
    
     public class TestClass : ITestInterface
     {
         public event TestDelegate TestEvent;
    
         public void FireAway()
         {
             if (TestEvent != null)
             {
                 TestEvent();
             }
         }
     }
    
     public class MainClass
     {
         static private void F()
         {
             System.Console.WriteLine("This is called when the event fires.");
         }
    
         static void Main()
         {
             ITestInterface i = new TestClass();
    
             i.TestEvent += new TestDelegate(F);
             i.FireAway();
         }
     }
    View Code

     2、接口事件、属性事件

    namespace WrapTwoInterfaceEvents
    {
        using System;
    
        public interface IDrawingObject
        {
            // Raise this event before drawing 
            // the object. 
            event EventHandler OnDraw;
        }
        public interface IShape
        {
            // Raise this event after drawing 
            // the shape. 
            event EventHandler OnDraw;
        }
    
    
        // Base class event publisher inherits two 
        // interfaces, each with an OnDraw event 
        public class Shape : IDrawingObject, IShape
        {
            // Create an event for each interface event 
            event EventHandler PreDrawEvent;
            event EventHandler PostDrawEvent;
    
            object objectLock = new Object();
    
            // Explicit interface implementation required. 
            // Associate IDrawingObject's event with 
            // PreDrawEvent 
            event EventHandler IDrawingObject.OnDraw
            {
                add
                {
                    lock (objectLock)
                    {
                        PreDrawEvent += value;
                    }
                }
                remove
                {
                    lock (objectLock)
                    {
                        PreDrawEvent -= value;
                    }
                }
            }
            // Explicit interface implementation required. 
            // Associate IShape's event with 
            // PostDrawEvent 
            event EventHandler IShape.OnDraw
            {
                add
                {
                    lock (objectLock)
                    {
                        PostDrawEvent += value;
                    }
                }
                remove
                {
                    lock (objectLock)
                    {
                        PostDrawEvent -= value;
                    }
                }
    
    
            }
    
            // For the sake of simplicity this one method 
            // implements both interfaces.  
            public void Draw()
            {
                // Raise IDrawingObject's event before the object is drawn.
                EventHandler handler = PreDrawEvent;
                if (handler != null)
                {
                    handler(this, new EventArgs());
                }
                Console.WriteLine("Drawing a shape.");
    
                // RaiseIShape's event after the object is drawn.
                handler = PostDrawEvent;
                if (handler != null)
                {
                    handler(this, new EventArgs());
                }
            }
        }
        public class Subscriber1
        {
            // References the shape object as an IDrawingObject 
            public Subscriber1(Shape shape)
            {
                IDrawingObject d = (IDrawingObject)shape;
                d.OnDraw += new EventHandler(d_OnDraw);
            }
    
            void d_OnDraw(object sender, EventArgs e)
            {
                Console.WriteLine("Sub1 receives the IDrawingObject event.");
            }
        }
        // References the shape object as an IShape 
        public class Subscriber2
        {
            public Subscriber2(Shape shape)
            {
                IShape d = (IShape)shape;
                d.OnDraw += new EventHandler(d_OnDraw);
            }
    
            void d_OnDraw(object sender, EventArgs e)
            {
                Console.WriteLine("Sub2 receives the IShape event.");
            }
        }
    
    
        public class Program
        {
            static void Main(string[] args)
            {
                Shape shape = new Shape();
                Subscriber1 sub = new Subscriber1(shape);
                Subscriber2 sub2 = new Subscriber2(shape);
                shape.Draw();
    
                // Keep the console window open in debug mode.
                System.Console.WriteLine("Press any key to exit.");
                System.Console.ReadKey();
            }
        }
    
    }
    /* Output:
        Sub1 receives the IDrawingObject event.
        Drawing a shape.
        Sub2 receives the IShape event.
    */
    View Code
  • 相关阅读:
    把Orchard部署到Windows Azure Web Sites
    使用Windows Live Writer 发布博客园博客
    使用Microsoft Word 2013 发布Blog到博客园
    Java栈的简单实现
    Java中的运算符
    Java简单双向链表实现 @version 1.0
    Java中的面向对象II
    认识和分析日志文件
    两数之和问题
    括号序列算法
  • 原文地址:https://www.cnblogs.com/shenchao/p/4674264.html
Copyright © 2011-2022 走看看