bubbletea

 

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

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

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

 9
10public 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中的部分我采用了显式实现)
 1using System;
 2
 3public delegate void MyDelegate();
 4
 5interface MyInterface2
 6{
 7    event MyDelegate Event;
 8    void Fire();
 9}

10
11public 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
49public 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中的方法了。

posted on 2005-10-31 12:31 Roger的Blog 阅读(669) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(1)

随笔档案(13)

搜索

最新评论

阅读排行榜

评论排行榜