首页 > 编程 > C# > 正文

C#中委托用法

2020-01-24 01:48:49
字体:
来源:转载
供稿:网友

本文实例讲述了C#中委托用法。分享给大家供大家参考。具体分析如下:

对于用户要查找的条件的千变万化,我们在写条件去查找时,是不可能一下写死的,那样,如果你写好了一个类让别人用,别人需要的不是那种查询,得去找你改条件.

那么我们能否让使用这个类的人自己定义一个规则(条件),直接传条件给你,你帮我查询出结果来,C#就可以用委托来解决,相应的java可以用接口来实现

using System;using System.Collections.Generic;using System.Text;using System.Collections;namespace FinderTest{  //性别枚举  public enum Genders  {     male=1,female=2  }  //学生类  public class Student  {    public Student()    { }    public Student(int _id, string _name, Genders _gender, DateTime _birthday, string _telephone)    {      this._id = _id;//学生id      this._name = _name;//学生姓名      this._gender = _gender;//学生性别      this._birthday = _birthday;//学生生日      this._telephone = _telephone;//学生电话    }    int _id;    public int Id    {      get { return _id; }      set { _id = value; }    }    string _name;    public string Name    {      get { return _name; }      set { _name = value; }    }    Genders _gender;    public Genders Gender    {      get { return _gender; }      set { _gender = value; }    }    DateTime _birthday;    public DateTime Birthday    {      get { return _birthday; }      set { _birthday = value; }    }    private string _telephone;    public string Telephone    {      get { return _telephone; }      set { _telephone = value; }    }    public void show()    {      Console.WriteLine(string.Format("我的姓名:{0}/t学号:{1}/t性别:{2}",_name,_id,_gender));    }  }}
using System;using System.Collections.Generic;using System.Text;using System.Collections;namespace FinderTest{  //学期枚举  public enum Semesters  {    x1 = 1, x2 = 2, x3 = 3  }  public delegate bool Predicate(Student s);//定义一个委托  //班级类  public class Class : ArrayList  {    public Class()    { }    public Class(string _name, string _master, Semesters _semester)    {      this._name = _name;      this._master = _master;      this._semester = _semester;      _allStudents = new ArrayList();    }    private string _name;//班级名字    public string Name    {      get { return _name; }      set { _name = value; }    }    private string _master;//班长    public string Master    {      get { return _master; }      set { _master = value; }    }    private Semesters _semester;//学期    public Semesters Semester    {      get { return _semester; }      set { _semester = value; }    }    //班级里的学生集合    ArrayList _allStudents;    public ArrayList AllStudents    {      get { return _allStudents; }    }    public ArrayList FindAll(Predicate match)    {      if (match == null)      {        return this._allStudents;      }      ArrayList result = new ArrayList();      for (int i = 0; i < this._allStudents.Count; i++)      {        Student one = (Student)this._allStudents[i];        if (match(one))        {          result.Add(one);        }      }      return result;    }  }}

using System;using System.Collections.Generic;using System.Text;using System.Collections;namespace FinderTest{  class Program  {    static void Main(string[] args)    {      Class c1 = new Class("0603", "jsp", Semesters.x1);      Student s1 = new Student(1, "zs", Genders.male, DateTime.Parse("1988-02-23"), "13088522635");      Student s2 = new Student(2, "ls", Genders.female, DateTime.Parse("1986-12-03"), "13188522888");      Student s3 = new Student(3, "ww", Genders.female, DateTime.Parse("1988-11-15"), "13288576885");      Student s4 = new Student(4, "zl", Genders.male, DateTime.Parse("1984-02-21"), "13388534635");      Student s5 = new Student(5, "qq", Genders.female, DateTime.Parse("1988-02-23"), "13488524335");      Student s6 = new Student(6, "cb", Genders.male, DateTime.Parse("1989-02-23"), "13588527636");      c1.AllStudents.Add(s1);      c1.AllStudents.Add(s2);      c1.AllStudents.Add(s3);      c1.AllStudents.Add(s4);      c1.AllStudents.Add(s5);      c1.AllStudents.Add(s6);      ArrayList list= c1.FindAll(match);      //查找班级女生的资料      //  ArrayList list = c1.FindAll(match1);      //查找学号从1到5的学生      foreach (Student s in list)      {        s.show();      }    }    //条件为女性    public static bool match(Student s)    {      if (s.Gender.Equals(Genders.female))      {        return true;      }      return false;    }    //条件为学号从1到5    public static bool match1(Student s)    {      if (s.Id.CompareTo(1) >= 0 && s.Id.CompareTo(5) <= 0)      {        return true;      }      return false;    }  }}

希望本文所述对大家的C#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表