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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章