已有57人关注
事件的继承
发表在C#图书答疑 2022-09-24 悬赏:4 学分 《C#从入门到精通(第4版)》第17章 面向对象技术高级应用
是否精华
版块置顶:

第一种情况:

    public delegate void MyDelegate();

    public class MyClass1

    {

        public event MyDelegate myDelegate = null;

        public void MyFun1()

        {

            Console.WriteLine("Test");

        }

        public void MyFun2()

        {

            myDelegate = new MyDelegate(MyFun1);

        }

        public void MyFun3()

        {

            myDelegate.Invoke();

        }

    }

MyClass1类内直接定义myDelegate成员,因此可以在MyClass1类内使用“=”操作myDelegate成员,也可以调用nvoke函数,这是合理的。

第二种情况:

    public delegate void MyDelegate();

    public class MyClass1

    {

        public event MyDelegate myDelegate = null;

    }

    public class MyClass2 : MyClass1

    {

        public void MyFun1()

        {

            Console.WriteLine("Test");

        }

        public void MyFun2()

        {

            myDelegate = new MyDelegate(MyFun1);    //报错

        }

        public void MyFun3()

        {

            myDelegate.Invoke();    //报错

        }

    }

MyClass2类内没有直接定义myDelegate成员,而是通过继承MyClass1类来继承myDelegate成员。此时却不能在MyClass2类内使用“=”操作myDelegate成员,也不能调用nvoke函数,否则编译器会报错。两种情况同样都拥有事件成员myDelegate,为何有此差别。

分享到:
精彩评论 1
小禾斗
学分:7318 LV13
TA的每日心情
奋斗
2017-04-21 14:00:25
2022-09-29
沙发

委托和事件使用的时候,在定义它的类之外,只能进行添加或者去除操作,也就是只能用在 += 或 -= 的左侧

首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照