1. 程式人生 > >C# 泛型約束,泛型函式

C# 泛型約束,泛型函式

   class 泛型
    {

        public static void Main()
        {

            //---------------測試泛型約束-------
            //定義一個Pression陣列
            Pression[] pr = new Pression[] { new Pression("蚊子",12),
            new Pression("棟凍", 10), new Pression("高高", 20)};
            sort<Pression> ss = new sort<Pression>();//例項化一個排序類
            ss.sortt(pr);//呼叫排序函式
            foreach (Pression ppr in pr)
            {//打印出排序後的序列
                Console.WriteLine(ppr.ToString());
            }

            //----------測試泛型函式---------
            int a = 5;
            Console.WriteLine("a -->" + a);
            int b = 9;
            Console.WriteLine("b -->" + b + "/n");
            pr[0].Swap<int>(ref a, ref b);
            Console.WriteLine("a-->" + a);
            Console.WriteLine("b-->" + b);

            Console.Read();
        }

    }

    //先來比較一下 一個類,實現了比較介面,這個類有兩個欄位
    class Pression : IComparable<Pression>
    {
        //這裡是泛型函式 交換x 和y
        public void Swap<T>(ref T x, ref T y)
        {
            T tem;
            tem = x;
            x = y;
            y = tem;
        }

        //--------------屬性方法、建構函式---------------
        private int year;
        private string name;

        public int Year
        {
            get { return year; }
            set { year = value; }
        }
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public Pression(string _name, int _year)
        {
            this.Name = _name;
            this.Year = _year;
        }
        public Pression() { }
        //-------------------------------------


        //------------實現比較的介面----------
        #region IComparable<Pression> 成員
        int IComparable<Pression>.CompareTo(Pression other)
        {
            return this.Year.CompareTo(other.Year);
        }
        #endregion
        //----------重寫了ToString方法---------
        public override string ToString()
        {
            return "姓名:" + this.Name +
                "*********年齡:" + this.Year;
        }
    }

    //----排序的類,要求要排序的物件實現了比較的介面----
    class sort<T> where T : IComparable<T>
    {
        public void sortt(T []t)
        {//這裡是一個氣泡排序法
            for (int i = 0; i < t.Length-1; i++)
                for (int j = i+1; j < t.Length; j++)
                {
                    if (t[i].CompareTo(t[j]) == 1)
                    {
                        T tt = t[i];
                        t[i] = t[j];
                        t[j] = tt;
                    }
                }
        }
    }