class Xuesheng { int chufaCount=0; public delegate boolean OnChaoxiing() public OnChaoxiing Chaoxiingprivate void chufa() { chufaCount++; }public void chaoxi() { if (!=null && Chaoxiing()) { chufa(); }} } xuesheng.Chaoxiing+=banzhangInstance.XXXXXclass Banzhang : Xuesheng { public boolean XXXXX() { //自定义处理 }}
刚才写了一个代码 不过貌似出问题了.. 能看看不?using System; using System.Collections.Generic; using System.Text;namespace Delegate { // 学生 public class Student { public string Name = ""; public int Tmies = 0; public Student(string name) { Name = name; } //声明委托 public delegate void CatchedEventHandler(Object sender, CatchEventArgs e); public event CatchedEventHandler Boiled; public class CatchEventArgs : EventArgs { public readonly string name; public CatchEventArgs(string name) { this.name = name; } } protected virtual void OnBoiled(CatchEventArgs e) { if (Boiled != null) { Boiled(this, e); } }
public void CatchStudent(Student student) { CatchEventArgs e = new CatchEventArgs(student.Name); OnBoiled(e);
} } public class Master : Student { public Master(string name) : base(name) { } public void MakeAlert(Object sender, CatchEventArgs e) { Student student = (Student)sender; student.Tmies++; Console.WriteLine("Alarm:{0}抓住了{1}童鞋,今天第{2}次: ",this.Name, student.Name, student.Tmies); Console.WriteLine("Alarm: 已经被扣了{0} 分了:", student.Tmies * 5); Console.WriteLine(); } } class Program { static void Main() { Master alarmMaster = new Master("我是五条杠"); var studentSelect = new List<Student>(); var studentAll=new List<Student>(); for (int i = 0; i < 10; i++) { var student=new Student("学生"+i); studentAll.Add(student); } for (int i = 0; i < 5; i++) { Random random = new Random(i); studentSelect.Add(studentAll[random.Next(9)]); } foreach (var student in studentSelect) { student.CatchStudent(student); student.Boiled += alarmMaster.MakeAlert; //注册方法
} Console.ReadLine(); } } }
public class Student { public Student(string strName) { Name = strName; Score = 100; ChaoZuoYeCount = 0; IsChaoZuoYe = false; } public string Name { get; set; } public int Score { get; set; } public int ChaoZuoYeCount { get; set; } public bool IsChaoZuoYe { get; set; } public override string ToString() { string strSpilt = "\t"; StringBuilder sb = new StringBuilder(); sb.Append("Name: " + Name + strSpilt); sb.Append("Score: " + Score + strSpilt); sb.Append("ChaoZuoYeCount: " + ChaoZuoYeCount + strSpilt); return sb.ToString(); } } public delegate void WatchStudent(Student student); public class StudentLeader : Student { public StudentLeader(string strName) : base(strName) { } public WatchStudent WatchHandler { get; set; } public void Watch(Student student) { if (WatchHandler != null) { WatchHandler(student); } } } public class DelegateDemo { public void DoTest() { List<Student> students = new List<Student>() { new Student("Student A"), new Student("Student B"), new Student("Student C"), new Student("Student D"), new Student("Student E"), }; StudentLeader leader = new StudentLeader("Leader"); leader.WatchHandler = DoWatch; int testCount = 10; Random rand = new Random(); for (int i = 0; i < testCount; i++) { foreach (Student student in students) { if (rand.Next(1, 10) % 2 == 0) { student.IsChaoZuoYe = true; } leader.Watch(student); } } Console.ReadKey(); } public void DoWatch(Student student) { if (student == null) { return; } if (student.IsChaoZuoYe) { student.Score += 5; student.ChaoZuoYeCount++; } Console.WriteLine(student.ToString()); } }
事件在main里注册,
去研究一下自定义事件
{
int chufaCount=0;
public delegate boolean OnChaoxiing()
public OnChaoxiing Chaoxiingprivate void chufa()
{
chufaCount++;
}public void chaoxi()
{
if (!=null && Chaoxiing())
{
chufa();
}}
}
xuesheng.Chaoxiing+=banzhangInstance.XXXXXclass Banzhang : Xuesheng
{ public boolean XXXXX()
{
//自定义处理 }}
能看看不?using System;
using System.Collections.Generic;
using System.Text;namespace Delegate
{
// 学生 public class Student
{
public string Name = "";
public int Tmies = 0;
public Student(string name)
{
Name = name;
}
//声明委托
public delegate void CatchedEventHandler(Object sender, CatchEventArgs e); public event CatchedEventHandler Boiled;
public class CatchEventArgs : EventArgs
{
public readonly string name;
public CatchEventArgs(string name)
{
this.name = name;
}
}
protected virtual void OnBoiled(CatchEventArgs e)
{
if (Boiled != null)
{
Boiled(this, e);
}
}
public void CatchStudent(Student student)
{
CatchEventArgs e = new CatchEventArgs(student.Name);
OnBoiled(e);
}
} public class Master : Student
{
public Master(string name) : base(name)
{
} public void MakeAlert(Object sender, CatchEventArgs e)
{
Student student = (Student)sender; student.Tmies++;
Console.WriteLine("Alarm:{0}抓住了{1}童鞋,今天第{2}次: ",this.Name, student.Name, student.Tmies);
Console.WriteLine("Alarm: 已经被扣了{0} 分了:", student.Tmies * 5);
Console.WriteLine();
}
}
class Program
{
static void Main()
{ Master alarmMaster = new Master("我是五条杠");
var studentSelect = new List<Student>();
var studentAll=new List<Student>();
for (int i = 0; i < 10; i++)
{
var student=new Student("学生"+i);
studentAll.Add(student);
}
for (int i = 0; i < 5; i++)
{
Random random = new Random(i);
studentSelect.Add(studentAll[random.Next(9)]);
} foreach (var student in studentSelect)
{
student.CatchStudent(student);
student.Boiled += alarmMaster.MakeAlert; //注册方法
}
Console.ReadLine();
}
}
}
public class Student
{
public Student(string strName)
{
Name = strName;
Score = 100;
ChaoZuoYeCount = 0;
IsChaoZuoYe = false;
} public string Name { get; set; }
public int Score { get; set; }
public int ChaoZuoYeCount { get; set; }
public bool IsChaoZuoYe { get; set; } public override string ToString()
{
string strSpilt = "\t";
StringBuilder sb = new StringBuilder();
sb.Append("Name: " + Name + strSpilt);
sb.Append("Score: " + Score + strSpilt);
sb.Append("ChaoZuoYeCount: " + ChaoZuoYeCount + strSpilt);
return sb.ToString();
}
} public delegate void WatchStudent(Student student); public class StudentLeader : Student
{
public StudentLeader(string strName)
: base(strName)
{ } public WatchStudent WatchHandler { get; set; }
public void Watch(Student student)
{
if (WatchHandler != null)
{
WatchHandler(student);
}
}
} public class DelegateDemo
{
public void DoTest()
{
List<Student> students = new List<Student>()
{
new Student("Student A"),
new Student("Student B"),
new Student("Student C"),
new Student("Student D"),
new Student("Student E"),
};
StudentLeader leader = new StudentLeader("Leader");
leader.WatchHandler = DoWatch; int testCount = 10;
Random rand = new Random();
for (int i = 0; i < testCount; i++)
{
foreach (Student student in students)
{
if (rand.Next(1, 10) % 2 == 0)
{
student.IsChaoZuoYe = true;
}
leader.Watch(student);
}
}
Console.ReadKey();
} public void DoWatch(Student student)
{
if (student == null)
{
return;
}
if (student.IsChaoZuoYe)
{
student.Score += 5;
student.ChaoZuoYeCount++;
} Console.WriteLine(student.ToString());
}
}
对student类修改进行封闭.