using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Sample_CUI
{
namespace Delegate_And_Event
{
/* 场景
XXX收到一个解决方案(内网建设方案),是否采用这个方案需要经过2个过程。
第一个过程(资料确认):需要技术部中User1和User2确认。
第二个过程(最终确认):需要CTO和CEO确认。
PS:过程中的确认人数和来自的部门也不同,过程有进展要通知相关的人员进行确认。
*/
/// <summary>
/// 通知事件
/// </summary>
public class WorkNoticeEventArgs : EventArgs
{
/// <summary>
/// 要通知的人
/// </summary>
public readonly List<string> users;
public WorkNoticeEventArgs(List<string> users)
{
this.users = users;
}
}
/// <summary>
/// 确认委托
/// </summary>
/// <param name="sender">确认方法</param>
/// <param name="e">通知事件</param>
public delegate void WorkNoticeEventHandler(object sender,WorkNoticeEventArgs e);
/// <summary>
/// 资料确认
/// </summary>
public class ProcessDataValidation
{
//声明事件
public event WorkNoticeEventHandler Begin = null;
public event WorkNoticeEventHandler User1Validated = null;
public event WorkNoticeEventHandler User2Validated = null;
public event WorkNoticeEventHandler Finished = null;
//是否确认
private bool user1Validated, user2Validated;
#region Method
/// <summary>
/// 过程开始
/// </summary>
/// <param name="users"></param>
public virtual void OnBegin(List<string> users)
{
//do something
Console.WriteLine("Begin[{0}]",
this.ToString().Substring(this.ToString().LastIndexOf('.') + 1)
);
if (Begin != null)
{
WorkNoticeEventArgs e = new WorkNoticeEventArgs(users);
Begin(this,e);//调用订阅此事件的方法
}
}
/// <summary>
/// User1确认
/// </summary>
/// <param name="users"></param>
public virtual void OnUser1Validate(List<string> users)
{
//do something
user1Validated = true;
Console.WriteLine("Use1 has been validated[{0}]",
this.ToString().Substring(this.ToString().LastIndexOf('.') + 1)
);
WorkNoticeEventArgs e = new WorkNoticeEventArgs(users);
User1Validated(this, e);//调用订阅此事件的方法
}
/// <summary>
/// User2确认
/// </summary>
/// <param name="users"></param>
public virtual void OnUser2Validate(List<string> users)
{
//do something
user2Validated = true;
Console.WriteLine("Use2 has been validated[{0}]",
this.ToString().Substring(this.ToString().LastIndexOf('.') + 1)
);
WorkNoticeEventArgs e = new WorkNoticeEventArgs(users);
User2Validated(this, e);//调用订阅此事件的方法
}
/// <summary>
/// 过程完成
/// </summary>
/// <param name="users"></param>
public virtual void OnFinish(List<string> users)
{
if (user1Validated && user2Validated)
{
//do something
Console.WriteLine("Finish[{0}]",
this.ToString().Substring(this.ToString().LastIndexOf('.') + 1)
);
WorkNoticeEventArgs e = new WorkNoticeEventArgs(users);
Finished(this,e);//调用订阅此事件的方法
}
}
#endregion
}//class ProcessDataValidation
/// <summary>
/// 资料确认子类
/// </summary>
public class ProcessDataValidate_NonNetSolution : ProcessDataValidation
{
/// <summary>
/// 改写父类方法
/// </summary>
/// <param name="users"></param>
public override void OnBegin(List<string> users)
{
//do something
users.Clear();
users.Add("Jie");
base.OnBegin(users);
}
}//class ProcessDataValidate_NonNetSolution
/// <summary>
/// 工作通知 监视者
/// </summary>
public class WorkNoticeObserver
{
public void NoticeUsersWhenProcessBegin(object sender, WorkNoticeEventArgs e)
{
Console.Write("Notice:");
for (int i = 0; i < e.users.Count; i++)
{
Console.Write("{0} ", e.users[i]);
}
Console.WriteLine();
Console.WriteLine();
}
public void NoticeUsersWhenUser1Validated(object sender, WorkNoticeEventArgs e)
{
Console.Write("Notice:");
for (int i = 0; i < e.users.Count; i++)
{
Console.Write("{0} ", e.users[i]);
}
Console.WriteLine();
Console.WriteLine();
}
public void NoticeUsersWhenUser2Validated(object sender, WorkNoticeEventArgs e)
{
Console.Write("Notice:");
for (int i = 0; i < e.users.Count; i++)
{
Console.Write("{0} ", e.users[i]);
}
Console.WriteLine();
Console.WriteLine();
}
public void NoticeUsersWhenProcessFinished(object sender, WorkNoticeEventArgs e)
{
Console.Write("Notice:");
for (int i = 0; i < e.users.Count; i++)
{
Console.Write("{0} ", e.users[i]);
}
Console.WriteLine();
Console.WriteLine();
}
}//class WorkNoticeObserver
public class SampleTest
{
public static void Test()
{
List<string> list1 = new List<string>();
list1.Add("User1");
list1.Add("User2");
list1.Add("CTO");
list1.Add("CEO");
List<string> list2 = new List<string>();
list2.Add("User2");
List<string> list3 = new List<string>();
list3.Add("User1");
List<string> list4 = new List<string>();
list4.Add("CTO");
list4.Add("CEO");
WorkNoticeObserver wn = new WorkNoticeObserver();
ProcessDataValidation p = new ProcessDataValidation();
//注册事件
p.Begin += new WorkNoticeEventHandler(wn.NoticeUsersWhenProcessBegin);
p.User1Validated += new WorkNoticeEventHandler(wn.NoticeUsersWhenUser1Validated);
p.User2Validated += new WorkNoticeEventHandler(wn.NoticeUsersWhenUser2Validated);
p.Finished += new WorkNoticeEventHandler(wn.NoticeUsersWhenProcessFinished);
//触发事件
p.OnBegin(list1);
p.OnUser1Validate(list2);
p.OnUser2Validate(list3);
p.OnFinish(list4);
p = null;
p = new ProcessDataValidate_NonNetSolution();
// 子类Begin事件的实现
p.Begin += delegate(object sender, WorkNoticeEventArgs e) {
Console.Write("Notice:");
for (int i = 0; i < e.users.Count; i++)
{
Console.Write("{0} ", e.users[i]);
}
Console.WriteLine();
};
p.OnBegin(list2);
}
}//class SampleTest
}//namespace Delegate_And_Event
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Sample_CUI
{
namespace Delegate_And_Event
{
/* 场景
XXX收到一个解决方案(内网建设方案),是否采用这个方案需要经过2个过程。
第一个过程(资料确认):需要技术部中User1和User2确认。
第二个过程(最终确认):需要CTO和CEO确认。
PS:过程中的确认人数和来自的部门也不同,过程有进展要通知相关的人员进行确认。
*/
/// <summary>
/// 通知事件
/// </summary>
public class WorkNoticeEventArgs : EventArgs
{
/// <summary>
/// 要通知的人
/// </summary>
public readonly List<string> users;
public WorkNoticeEventArgs(List<string> users)
{
this.users = users;
}
}
/// <summary>
/// 确认委托
/// </summary>
/// <param name="sender">确认方法</param>
/// <param name="e">通知事件</param>
public delegate void WorkNoticeEventHandler(object sender,WorkNoticeEventArgs e);
/// <summary>
/// 资料确认
/// </summary>
public class ProcessDataValidation
{
//声明事件
public event WorkNoticeEventHandler Begin = null;
public event WorkNoticeEventHandler User1Validated = null;
public event WorkNoticeEventHandler User2Validated = null;
public event WorkNoticeEventHandler Finished = null;
//是否确认
private bool user1Validated, user2Validated;
#region Method
/// <summary>
/// 过程开始
/// </summary>
/// <param name="users"></param>
public virtual void OnBegin(List<string> users)
{
//do something
Console.WriteLine("Begin[{0}]",
this.ToString().Substring(this.ToString().LastIndexOf('.') + 1)
);
if (Begin != null)
{
WorkNoticeEventArgs e = new WorkNoticeEventArgs(users);
Begin(this,e);//调用订阅此事件的方法
}
}
/// <summary>
/// User1确认
/// </summary>
/// <param name="users"></param>
public virtual void OnUser1Validate(List<string> users)
{
//do something
user1Validated = true;
Console.WriteLine("Use1 has been validated[{0}]",
this.ToString().Substring(this.ToString().LastIndexOf('.') + 1)
);
WorkNoticeEventArgs e = new WorkNoticeEventArgs(users);
User1Validated(this, e);//调用订阅此事件的方法
}
/// <summary>
/// User2确认
/// </summary>
/// <param name="users"></param>
public virtual void OnUser2Validate(List<string> users)
{
//do something
user2Validated = true;
Console.WriteLine("Use2 has been validated[{0}]",
this.ToString().Substring(this.ToString().LastIndexOf('.') + 1)
);
WorkNoticeEventArgs e = new WorkNoticeEventArgs(users);
User2Validated(this, e);//调用订阅此事件的方法
}
/// <summary>
/// 过程完成
/// </summary>
/// <param name="users"></param>
public virtual void OnFinish(List<string> users)
{
if (user1Validated && user2Validated)
{
//do something
Console.WriteLine("Finish[{0}]",
this.ToString().Substring(this.ToString().LastIndexOf('.') + 1)
);
WorkNoticeEventArgs e = new WorkNoticeEventArgs(users);
Finished(this,e);//调用订阅此事件的方法
}
}
#endregion
}//class ProcessDataValidation
/// <summary>
/// 资料确认子类
/// </summary>
public class ProcessDataValidate_NonNetSolution : ProcessDataValidation
{
/// <summary>
/// 改写父类方法
/// </summary>
/// <param name="users"></param>
public override void OnBegin(List<string> users)
{
//do something
users.Clear();
users.Add("Jie");
base.OnBegin(users);
}
}//class ProcessDataValidate_NonNetSolution
/// <summary>
/// 工作通知 监视者
/// </summary>
public class WorkNoticeObserver
{
public void NoticeUsersWhenProcessBegin(object sender, WorkNoticeEventArgs e)
{
Console.Write("Notice:");
for (int i = 0; i < e.users.Count; i++)
{
Console.Write("{0} ", e.users[i]);
}
Console.WriteLine();
Console.WriteLine();
}
public void NoticeUsersWhenUser1Validated(object sender, WorkNoticeEventArgs e)
{
Console.Write("Notice:");
for (int i = 0; i < e.users.Count; i++)
{
Console.Write("{0} ", e.users[i]);
}
Console.WriteLine();
Console.WriteLine();
}
public void NoticeUsersWhenUser2Validated(object sender, WorkNoticeEventArgs e)
{
Console.Write("Notice:");
for (int i = 0; i < e.users.Count; i++)
{
Console.Write("{0} ", e.users[i]);
}
Console.WriteLine();
Console.WriteLine();
}
public void NoticeUsersWhenProcessFinished(object sender, WorkNoticeEventArgs e)
{
Console.Write("Notice:");
for (int i = 0; i < e.users.Count; i++)
{
Console.Write("{0} ", e.users[i]);
}
Console.WriteLine();
Console.WriteLine();
}
}//class WorkNoticeObserver
public class SampleTest
{
public static void Test()
{
List<string> list1 = new List<string>();
list1.Add("User1");
list1.Add("User2");
list1.Add("CTO");
list1.Add("CEO");
List<string> list2 = new List<string>();
list2.Add("User2");
List<string> list3 = new List<string>();
list3.Add("User1");
List<string> list4 = new List<string>();
list4.Add("CTO");
list4.Add("CEO");
WorkNoticeObserver wn = new WorkNoticeObserver();
ProcessDataValidation p = new ProcessDataValidation();
//注册事件
p.Begin += new WorkNoticeEventHandler(wn.NoticeUsersWhenProcessBegin);
p.User1Validated += new WorkNoticeEventHandler(wn.NoticeUsersWhenUser1Validated);
p.User2Validated += new WorkNoticeEventHandler(wn.NoticeUsersWhenUser2Validated);
p.Finished += new WorkNoticeEventHandler(wn.NoticeUsersWhenProcessFinished);
//触发事件
p.OnBegin(list1);
p.OnUser1Validate(list2);
p.OnUser2Validate(list3);
p.OnFinish(list4);
p = null;
p = new ProcessDataValidate_NonNetSolution();
// 子类Begin事件的实现
p.Begin += delegate(object sender, WorkNoticeEventArgs e) {
Console.Write("Notice:");
for (int i = 0; i < e.users.Count; i++)
{
Console.Write("{0} ", e.users[i]);
}
Console.WriteLine();
};
p.OnBegin(list2);
}
}//class SampleTest
}//namespace Delegate_And_Event
}