• teacher and student(reship)


    关于委托和事件的示例
    !关于委托和事件,许多高手都已经对此进行了很详尽的描述,昨晚突然想到一个情景,于是今天写了这个委托和事件的例子出来,纯粹是为了练习一下,也希望这篇随笔对您有帮助!
    情景大概是这样的:有一个老师,他教好几个班级,然后每次考试后,他都会小小惩罚成绩低于几个班级成绩的平均分的同学,同学们自然会很怕受罚啊,考完试立刻打电话问老师。老师刚开始能够很耐心的回答:张三,你多少分;李四你多少分。。。日子久了,可就折腾人了,刚好这个老师刚学了委托和事件,就写了个小程序。这个程序的功能是,一旦学生问成绩,立刻交给这个程序去处理,然后程序显示结果,老师当然就可以在旁边轻松地喝茶咯,哈哈,看看代码吧!
    首先写个学生实体类,简单的啦
     1 class student
     2     {
     3         public delegate void requestHandle(object student,askEventArgs ev);
     4         public event requestHandle askResult;
     5         //定义触发事件的方法,放出消息好让老师知道(就是订阅事件)
     6         private string _name;
     7       
     8         public student(string name)
     9         {
    10             this._name = name;
    11           
    12         }
    13         public string Name
    14         {
    15             get { return this._name; }
    16       
    17         }
    18         public void onAskResult(object student, askEventArgs resultInformation)
    19         {
    20             if (askResult != null)
    21             {
    22                 askResult(student, resultInformation);
    23             }
    24         }
    25         public void askTeacher()
    26         {
    27             askEventArgs result = new askEventArgs(false,this.Name);
    28             //调用触发事件的方法
    29             onAskResult(this,result);
    30         }
    31     }
    这样,传入一个学生名字实例化一个新对象,学生一旦askTeacher(问老师咯),就触发了askResult事件,onAskResult()相对于askResult事件只是触发前多检查了该事件是否为空。
    接下来要写事件参数类,也就是上面onAskResult的参数类型-askEventArgs类,代码如下:
     class askEventArgs :EventArgs
        {
            
    private bool _result;
            
    private string _name;
            
    public bool result 
            {
                
    get { return this._result; }
                
    set { this._result = value; }
            }
            
    public string Name
            {
                
    get { return this._name; }

            }
            
    public askEventArgs(bool unAsk,string name)
            {
                
    this._result =unAsk;
                
    this._name = name;
            }
        }
    这个参数类保存了学生的名字和即将告知的结果,(result)结果属性为可写的哦;
    接下来是老师的部分了,他要订阅学生问成绩这个事件。然后自动给出判断!

     public Teacher() { }
            
    public void recevid(student stu)
            {
                stu.askResult 
    += new student.requestHandle(feedBack);
            }

            
    public void feedBack(object stu, askEventArgs ev)
            {
                student s
    =(student)stu;
                
    if (getResult(s.Name))
                {
                    ev.result 
    = true;
                    Console.Write(
    "考试人:"+ev.Name+"\n"+"成绩评价:不错!\n");
                    Console.ReadLine();
                }
                
    else 
                {
                    Console.Write(
    "考试人:" + ev.Name + "\n" + "成绩评价:不及格,要努力!\n");
                    Console.ReadLine();
                }
            }
            
    public bool getResult(string name) 
            {
                Hashtable hs 
    = new Hashtable();
                hs.Add(
    "张三",90);
                hs.Add(
    "王五",85);
                hs.Add(
    "李四",59);
                
    if (Convert.ToInt32( hs[name]) > 60)
                {
                    
    return true;
                }
                
    else 
                {
                    
    return false;
                }
            }
        }
    这里简化了很多,直接用一个hashTable保存数据,更多的功能和判断自己去拓展吧!这里只是简单的判断加打印!包涵包涵!
    最后是测试拉(用程序台)
     1  static void Main(string[] args)
     2         {
     3            
     4                 string name = Console.ReadLine();
     5                 student stu = new student(name);
     6                 Teacher tea = new Teacher();
     7                 tea.recevid(stu);
     8                 stu.askTeacher();
     9             
    10           
    11             
    12            
    13          
    14         }
    当老师注册了学生问成绩的事件后,学生一问老师,结果就自动出来了,老师呢,一边喝茶一边感叹了解只知识的好处啊,哈哈。。。
  • 相关阅读:
    python disable node
    Spring拥有xml配置文件和JavaConfig并存的情况
    Spring拥有多个JavaConfig(@Configuration)的情况
    阿里腾讯极其看重的数据中台,我用大白话给你解释清楚了
    f5 force offline
    JavaScript内存优化
    JavaScript内存优化
    JavaScript内存优化
    TreeMap分析(中)
    TreeMap分析(中)
  • 原文地址:https://www.cnblogs.com/hq2008/p/938068.html
Copyright © 2020-2023  润新知