现在的位置: 首页 > 综合 > 正文

C#中委托

2013年10月13日 ⁄ 综合 ⁄ 共 4604字 ⁄ 字号 评论关闭

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

那么我们能否让使用这个类的人自己定义一个规则(条件),直接传条件给你,你帮我查询出结果来,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;
        }
    }
}

抱歉!评论已关闭.