| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 765 人关注过本帖
标题:关于事件和委托
只看楼主 加入收藏
meining
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-10-27
收藏
 问题点数:0 回复次数:9 
关于事件和委托
创建事件ZeroEvent,接受用户输入的两个数。如果用户输入的数字0,则应该引发该事件并调用方法Disp来显示“不允许以0为除数”,如果输入数字大于0,则对数字进行除法计算并显示结果。。

   下面是我写的代码。。
     但没有实现效果。。。
  希望有人指点一下。。
    谢了。。。。
namespace Test2
{
    class Division
    {
        public delegate void DeleDiv();
        public event DeleDiv EventDivZero;

        private int _a;

        public int A
        {
            get { return _a; }
            set { _a = value; }
        }
        private int _b;

        public int B
        {
            get { return _b; }
            set
            {
                _b = value;
                if (_b == 0)
                {
                    EventDivZero();
                    Disp();
                }
            }
        }

        public void Disp()
        {
            Console.WriteLine ("不允许以0为除数。");
        }

        public int Show()
        {
            Console.Write("请输入第一个数:");
            int a = int.Parse(Console.ReadLine());
            Console.Write("请输入第二个数:");
            int b = int.Parse(Console.ReadLine());
            int num = a / b;
            if (b == 0)
            {
               
                Disp();
            }
            Console.Write("结果为:"+num);
            Console.WriteLine();
            return num;
        }
    }
}

[[it] 本帖最后由 meining 于 2008-11-17 11:19 编辑 [/it]]
搜索更多相关主题的帖子: 委托 
2008-11-17 11:16
meining
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-10-27
收藏
得分:0 
有没有人帮忙一下呀。。。。
2008-11-17 11:49
乖老鼠
Rank: 5Rank: 5
来 自:四川省
等 级:职业侠客
威 望:2
帖 子:434
专家分:394
注 册:2008-9-8
收藏
得分:0 
你这样就实现事件调用了?

转眼就从编程菜鸟混成了半灌水
2008-11-17 12:27
乖老鼠
Rank: 5Rank: 5
来 自:四川省
等 级:职业侠客
威 望:2
帖 子:434
专家分:394
注 册:2008-9-8
收藏
得分:0 
先吃饭,完了再弄

转眼就从编程菜鸟混成了半灌水
2008-11-17 12:27
hellson
Rank: 2
来 自:北京
等 级:新手上路
威 望:4
帖 子:195
专家分:0
注 册:2008-9-1
收藏
得分:0 
int num = a / b; //应该是这里触发吧 重载运算符?try catch 结构?
你给a b 赋值的时候什么运算还没确定,如果算加法不能判断 b==0 就"除数不能为0了吧"

春了夏了秋冬了,来了来了又来了
相信我的帖子打开都很快,看我头像就知道了
2008-11-17 12:46
hellson
Rank: 2
来 自:北京
等 级:新手上路
威 望:4
帖 子:195
专家分:0
注 册:2008-9-1
收藏
得分:0 
算了,我也吃饭。。

[[it] 本帖最后由 hellson 于 2008-11-17 12:50 编辑 [/it]]

春了夏了秋冬了,来了来了又来了
相信我的帖子打开都很快,看我头像就知道了
2008-11-17 12:49
乖老鼠
Rank: 5Rank: 5
来 自:四川省
等 级:职业侠客
威 望:2
帖 子:434
专家分:394
注 册:2008-9-8
收藏
得分:0 
LZ,刚才你仔细看你的代码,赋值进VS才发现一个很严重的问题

        public int B
        {
            get { return _b; }
            set
            {
                _b = value;
                if (_b == 0)
                {
                    EventDivZero();
                    Disp();
                }
            }
        }

这段属性代码你根本没调用… 你后面读取值的时候用的是小b…你解释下这个是怎么回事

转眼就从编程菜鸟混成了半灌水
2008-11-17 14:01
乖老鼠
Rank: 5Rank: 5
来 自:四川省
等 级:职业侠客
威 望:2
帖 子:434
专家分:394
注 册:2008-9-8
收藏
得分:0 
LZ,下面的代码是我改了之后的,你拿去用。

using System;
using System.Collections.Generic;
using System.Text;

namespace EventBeta
{
    class Program
    {
        class Division
        {
            //定义委托
            public delegate void DeleDiv();
            //定义事件
            public event DeleDiv EventDivZero;

            private int _a;
            private int _b;

            public Division()
            {
                //订阅事件
                EventDivZero += new DeleDiv(Division_EventDivZero);
            }
            /// <summary>
            /// 被除数
            /// </summary>
            public int A
            {
                get { return _a; }
                set { _a = value; }
            }
            /// <summary>
            /// 除数
            /// </summary>
            public int B
            {
                get { return _b; }
                set
                {
                    if (value == 0)
                    {
                        //触发事件
                        EventDivZero();
                        //重新输入
                        Console.Write("请输入第二个数:");
                        B = int.Parse(Console.ReadLine());
                    }
                    else
                    {
                        _b = value;
                    }
                }
            }
            /// <summary>
            /// 事件响应代码
            /// </summary>
            private void Division_EventDivZero()
            {
                Console.WriteLine("不允许以0为除数。");
            }
            /// <summary>
            /// 执行运算
            /// </summary>
            public void Show()
            {
                Console.Write("请输入第一个数:");
                A = int.Parse(Console.ReadLine());
                Console.Write("请输入第二个数:");
                B = int.Parse(Console.ReadLine());
                int num = A / B;
                Console.Write("结果为:" + num);
                Console.WriteLine();
                Console.ReadKey();
            }
        }
        static void Main(string[] args)
        {
            Division test = new Division();
            test.Show();
        }
    }
}

转眼就从编程菜鸟混成了半灌水
2008-11-17 14:13
乖老鼠
Rank: 5Rank: 5
来 自:四川省
等 级:职业侠客
威 望:2
帖 子:434
专家分:394
注 册:2008-9-8
收藏
得分:0 
LZ应该是才开始学吧?类的属性的定义倒是写得不错,就是为什么会在show函数里出那样的错误呢?

转眼就从编程菜鸟混成了半灌水
2008-11-17 14:14
梦心
Rank: 4
来 自:福建平和
等 级:贵宾
威 望:13
帖 子:1910
专家分:0
注 册:2007-5-11
收藏
得分:0 
怪老鼠写的很GOOD
委托和事件是必须要会的,LZ多多勉励

我清高和我骄傲的倔强,在风中大声的唱:我不听,我不听~~做我自己最特别,呼呼~~啦啦~~~
我的博客园地址: [url]http://[/url]
2008-11-18 09:17
快速回复:关于事件和委托
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033755 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved