学生类
班长类继承学生类
班长负责巡查。
学生抄作业一次,扣5份,二次10分,以此类推。
学生存在一个list里面,抄作业的学生是随机的。
问用委托实现。

解决方案 »

  1.   

    在学生类里定义一个委托,再申明一个事件,
    事件在main里注册,
    去研究一下自定义事件
      

  2.   

    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()
    {
    //自定义处理 }}
      

  3.   

    刚才写了一个代码 不过貌似出问题了..
    能看看不?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();
            }
        }
    }
      

  4.   


    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());
            }
        }
      

  5.   

        以后修改了扣分规则只要修改DelegateDemo.DoWatch里面的规则就可以,
     对student类修改进行封闭.