委托与事件

博客以A叫B开灯为例解释委托与事件,随后介绍如何应用委托与事件实现简单的电子邮件验证程序。包括对邮件@字符和用户名部分的验证要求,还创建了提示验证开始和结束的委托与事件,并给出实现代码,助力编程爱好者解惑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

早在前面已经说清楚了,委托呢?就是例如:A叫B去把灯给打开,这就是一个典型的委托,而B把灯打开了,灯被打开了,就是一个事件。下面,就以一个典型的例子,来说说我们如何的应用委托与事件。

请看如下的题目要求:

实现程序时,我们经常要对用户的输入进行验证。比如你的程序需要用户输入电子邮件信息,在这个信息保存或使用之前,常常要对它进行验证,看他输入的信息是否合法电子邮件格式。这里我们就建立一个简单的电子邮件验证程序,要求如下:

  1. 对电子邮件信息的@字符的验证:
    1. 存在@字符;
    2. 只允许有一个@字符;
    3. @字符只允许放在中间某一位置上。
  2. 对电子邮件的用户名部分的验证
    1. 不允许小于三个字符;
    2. 不允许出现逗号;
    3. 数字不能在用户名的开头。
  3. 创建委托BeginValidData,用于提示用户验证开始,创建事件OnBeginValid。在开始验证用户的输入数据前应引发此事件,并且该事件应提示用户验证开始。
  4. 创建委托EndValidData,用于提示用户验证结束,并给出验证结果,表明程序对用户的信息是接受还是拒绝。创建事件OnEndValid,在对用户的输入数据验证后引发此事件,并且该事件应提示用户验证结束。

具体的参见以下的实现代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Mail;
using System.Text;
using System.Threading.Tasks;

namespace test3
{
    class Valider
    {
        //根据true和false来判断是否验证通过
        private bool acceept = false;

        //保存用户的电子邮箱地址
        private string vldemail = "";

        //定义一个开始的委托事件
        public delegate void BeginValidData();

        //定义开始事件
        public event BeginValidData OnBeginValid;

        //定义结束的委托验证
        public delegate void EndValidData(string s);

        //定义结束事件
        public event EndValidData OnEndValid;

        //可以根据如下的判断是否是一个合法的邮箱地址验证
        public void Process(string email)
        {
            vldemail = email;

            //调用它的开始事件
            if (OnBeginValid != null)
                OnBeginValid();
                //验证@符号
                validAtSym();
            //如果@符号通过验证,则是用户名验证
            if (acceept)
                validUserName();

            string s = "";
            if(acceept)
                s = "电子邮箱地址合法!";
            else
                s = "电子邮箱地址非法!";

            if (OnEndValid != null)
                OnEndValid(s);
        }

        // 私有方法:用来验证电子邮箱地址中的@符号
        private void validAtSym()
        {
            //通过数下标的方式来判断
            int index = vldemail.IndexOf('@');
            int lastIndex = vldemail.LastIndexOf('@');

            //表明字符串没有@符号
            if (index == -1)
            {
                acceept = false;
                return;
            }

            // 表明字符串中存在多于一个@符号
            if (index != lastIndex)
            {
                acceept = false;
                return;
            }
            //表明@符号在字符串的开始位置
            if (index == 0)
            {
                acceept = false;
                return;
            }
            //表明@符号在字符串末尾
            if (lastIndex == vldemail.Length -1)
            {
                acceept = false;
                return;
            }
            //@符号部分通过验证
            acceept = true;
        }
        private void validUserName()
        {
            //获取用户名的一部分
            string userName = vldemail.Split('@')[0];

            // 表示用户名长度不符合要求
            if (userName.Length < 3)
            {
                acceept = false;
                return;
            }

            //表示用户名中有逗号存在
            if (userName.IndexOf(',') > -1)
            {
                acceept = false;
                return;
            }

            //表示用户名第一位是数字
            if (char.IsDigit(userName, 0))
            {
                acceept = false;
                return;
            }

            //用户名通过验证
            acceept = true;
        }
        static void Main(string[] args)
        {
            Valider obj = new Valider();

            //注册开始事件
            obj.OnBeginValid += Obj_OnBeginValid;
            //注册结束事件
            obj.OnEndValid += Obj_OnEndValid;

            Console.WriteLine("请输入您的电子邮箱地址:");
            string address = Console.ReadLine();

            obj.Process(address);
            Console.ReadKey();
        }
        private static void Obj_OnEndValid(string s)
        {
            Console.WriteLine(s);
            Console.WriteLine("结束验证.......");
        }
        private static void Obj_OnBeginValid()
        {
            Console.WriteLine("开始验证..........");
        }
    }
}

通过这个简单的代码案例和练习,希望能够帮助到有技术疑惑的编程爱好者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值