早在前面已经说清楚了,委托呢?就是例如:A叫B去把灯给打开,这就是一个典型的委托,而B把灯打开了,灯被打开了,就是一个事件。下面,就以一个典型的例子,来说说我们如何的应用委托与事件。
请看如下的题目要求:
实现程序时,我们经常要对用户的输入进行验证。比如你的程序需要用户输入电子邮件信息,在这个信息保存或使用之前,常常要对它进行验证,看他输入的信息是否合法电子邮件格式。这里我们就建立一个简单的电子邮件验证程序,要求如下:
- 对电子邮件信息的@字符的验证:
- 存在@字符;
- 只允许有一个@字符;
- @字符只允许放在中间某一位置上。
- 对电子邮件的用户名部分的验证
- 不允许小于三个字符;
- 不允许出现逗号;
- 数字不能在用户名的开头。
- 创建委托BeginValidData,用于提示用户验证开始,创建事件OnBeginValid。在开始验证用户的输入数据前应引发此事件,并且该事件应提示用户验证开始。
- 创建委托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("开始验证..........");
}
}
}
通过这个简单的代码案例和练习,希望能够帮助到有技术疑惑的编程爱好者。