对于用户要查找的条件的千变万化,我们在写条件去查找时,是不可能一下写死的,那样,如果你写好了一个类让别人用,别人需要的不是那种查询,得去找你改条件.
那么我们能否让使用这个类的人自己定义一个规则(条件),直接传条件给你,你帮我查询出结果来,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;
}
}
}