C#中关于delegate的接口实现(2)

C#中关于delegate的接口实现(2)

比较下面代码(注掉comment 1 || 注掉comment 2) 具体区别参考cs0071

 1 using  System;
 2
 3 public   delegate   void  MyDelegate();
 4
 5 interface  MyInterface2
 6 {
 7    event MyDelegate Event;
 8}

 9
10 public   class  Test2:MyInterface2
11 {
12    
13    //comment 1 starting
14    private event MyDelegate innerEvent;
15    public event MyDelegate Event
16    {
17        add
18        {
19            innerEvent += value;
20            Console.WriteLine("add");
21        }

22        remove
23        {
24            innerEvent -= value;
25            Console.WriteLine("remove");
26        }

27    }

28    public void Fire()
29    {
30        if (innerEvent != null
31        {
32            innerEvent();
33        }

34    }

35    //comment 1 ending
36
37    //comment 2 starting
38//        public event MyDelegate Event;
39//        public void Fire()
40//        {
41//            if (Event != null) {
42//                Event();
43//            }
44//        }
45    //comment 2 ending
46
47
48    public void Handler()
49    {
50        Console.WriteLine("Handler been invoked!");
51    }

52
53    public static void Main()
54    {
55        Test2 p = new Test2();
56
57        p.Event += new MyDelegate(p.Handler);
58        p.Fire();
59        p.Event -= new MyDelegate(p.Handler);
60        p.Fire();
61    }

62}

63

下面是实际中用接口调用:(其中comment 1中的部分我采用了显式实现)
 1 using  System;
 2
 3 public   delegate   void  MyDelegate();
 4
 5 interface  MyInterface2
 6 {
 7    event MyDelegate Event;
 8    void Fire();
 9}

10
11 public   class  Test2:MyInterface2
12 {
13    
14    //comment 1 starting
15    private event MyDelegate innerEvent;
16    event MyDelegate MyInterface2.Event
17    {
18        add
19        {
20            innerEvent += value;
21            Console.WriteLine("add");
22        }

23        remove
24        {
25            innerEvent -= value;
26            Console.WriteLine("remove");
27        }

28    }

29    public void Fire()
30    {
31        if (innerEvent != null
32        {
33            innerEvent();
34        }

35    }

36    //comment 1 ending
37
38    //comment 2 starting
39//    public event MyDelegate Event;
40//    public void Fire()
41//    {
42//        if (Event != null) {
43//            Event();
44//        }
45//    }
46    //comment 2 ending
47}

48
49 public   class  Test4
50 {
51    public static void Handler()
52    {
53        Console.WriteLine("Handler been invoked!");
54    }

55
56    public static void Main()
57    {
58        MyInterface2 p = new Test2();
59        p.Event += new MyDelegate(Test4.Handler);
60        p.Fire();
61        p.Event -= new MyDelegate(Test4.Handler);
62        p.Fire();
63    }

64}

65
可以看出,comment 2不能显式实现,因此,对于实现两个不同的接口的两个相同名称的事件就
只能用comment 1中的方法了。

你可能感兴趣的:(C#中关于delegate的接口实现(2))