委托的學習(2)


               嘿嘿,“如果別人朝你扔石頭,就不要扔回去,留着做你建高樓的基石”,我知道自己喜歡程序,甚至是說喜歡.net,所以我選擇了學習,今天的一切無論是打擊也好,鼓勵也罷,我都感謝在我博客留言的每一位友友,是你們讓我重新清醒,同時也讓我再次經受考驗,或許走在社會上的您們已經習慣了被打擊和被鼓勵,而對於我們這些還未踏進社會的學生們說一切還都是未知數,我想如果我就憑着幾位友友來打擊我,我就告別了這里,那我只能說我是一個軟弱者,這個社會未來也是不可能讓我成長的,無論今天您們說了什么,我都感謝您,我會永遠帶着積極地態度在這里成長,在這里豐富自己的知識,我相信無論未來怎樣,我都會有一種平和的心態面對,錯啦我會改正,您的建議永遠是我進步的階梯。我會收起您厭惡的那些點滴,仍然保持一個陽光的自我。我想:其實每一個人沒必要刻意做些什么的,而且是來求知的,又是何必那?

         下面就總結一下今天我學習的一些內容吧,前幾天在學習委托,只是初步的總結一點,這個是前面總結的(http://www.cnblogs.com/dyxd/p/4176105.html),下面接下來在總結一些。

          一.求任意類型的最大值  

           1.int類型和引用類型person的數組

/// <summary>
    /// 如果 n1 > n2 返回大於0的數
    /// 如果 n1 < n2 返回小於0的數
    /// 如果 n1 == n2  返回0
    /// </summary>
    /// <param name="n1"></param>
    /// <param name="n2"></param>
    /// <returns></returns>
    delegate int DelCompare(object n1,object n2); 
class Program
    {
        static void Main(string[] args)
        {
            #region 定義int類型的數組
            //object[] array = { 1, 2, 3, 4, 5, 6 };          //定義一個int類型的數組
            //object max = GetMax(array, CompareInt);
            //Console.WriteLine(max);
            //Console.ReadKey();

            object[] array =
                {
                      new  Person("張三",10),
                      new  Person("李四",11),
                      new  Person("王五",12)
                };
            object o = GetMax(array, ComparePerson);
            Console.WriteLine(o);
        }
        //static int CompareInt(object n1, object n2)            //在這里方法主要是轉換類型以及返回值類型
        //{
        //    int a1 = Convert.ToInt32(n1);
        //    int a2 = Convert.ToInt32(n2);
        //    return a1 - a2;
        //}
        static int ComparePerson(object o1, object o2)
        {
            Person p1 = o1 as Person;
            Person p2 = o2 as Person;
            return p1.Age - p2.Age;
        }
            #endregion
        static object GetMax(object[] array,DelCompare del)
        {
            object max=array[0];
            for (int i = 0; i < array.Length; i++)
            {
                if (del(max, array[0]) < 0)   //通過調用委托的方法,在這里委托時含有兩個object類型的參數
                {
                     max=array[i];
                }
            }
            return max;
        }
    }

               

             在這里我們定義一個object類型的數組,所以我們在定義委托時間一定要注意需要傳參時間的類型,這里需要的參數的類型是object類型,由於它是需要傳一個方法,而這個方法的參數是一個object類型,所以我們考慮到委托的參數應該是object類型,而在委托的返回類型上面也是需要注意的,當有兩種情況時間可以使用bool類型,而三種情況則需要選擇int類型,在代碼中有注釋的;還有就是記得轉換類型,這里是根據我們定義的數組類型來決定的。

                    二.方法FindAll的使用

    class Person
    {
        public Person(string name, int age)
        {
            this.name = name;
            this.age = age;
        }
        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        private int age;
        public int Age
        {
            get { return age; }
            set { age = value; }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<Person> persons = new List<Person>();
            persons.Add(new Person("張三",15));
            persons.Add(new Person("李四",20));
            persons.Add(new Person("王五",21));
            persons.Add(new Person("趙六", 14));

              //persons.RemoveAll(Compare);
              //Predicate<Person> pre = new Predicate<Person>(Compare);
              //List<Person> list = persons.FindAll(pre);

           for (int i = 0; i < list.Count; i++)
            {
                Console.WriteLine(list[i].Name);
            }
            Console.Read();
            }
           static bool Compare(Person p)
            {
            if (p.Age < 20)
            {
               return true;
            }
            else
            {
                return false;
            }
        }
    }

 

                在這里使用的是FindALL方法,而FindAll的參數是一個委托,嘿嘿,所以我們需要一個方法,在這里是使用的是比較大小,所以我們可以給它一個compare的方法。

           嘿嘿,今天就寫到這里,委托剛開始學習感覺沒有那樣的難以理解,但是做起來題卻是迷茫,現在學習的多就不會在感覺不知道怎樣思考怎樣做。所以想要更好的掌握一種方法還是要選擇更多的練習,這可能是最笨的方法,但是卻是最好的選擇吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM