程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Tuple補遺

編輯:.NET實例教程
在我前面的文章利用.Net泛型實現了一個Tuple.在這兩天的使用中發現還要再加點東西才能好用.有三個地方:1Tuple要想Array,Enum,Delegate一樣有一個基類,這樣在不確定Tuple類型參個數時可以用這個基類.2.要增加一個判斷函數,用來確定任意給定的一個對象是否屬於Tuple中的類型(也許再加一個判定是否Tuple內的item的函數).3.增加默認構造,這樣做是為了那些只要類型而無需具體對象的場合.



//只貼出Tuple<T1>和Tuple<T1, T2>的代碼,其他的自己加
 public class Tuple
    ...{
        public Tuple() ...{}
       //具體判斷兩個類型是否一致
        protected bool JudgeType<T, V>(T t, V v)
        ...{
            return typeof(T).Equals(v.GetType());
        }
        //Tuple中是否有這種類型
        public virtual bool HasType<V>(V v)
        ...{
            return false;
        } 
    };
    public class Tuple<T1> : Tuple
   ...{
        T1 _t1;        
        public Tuple(T1 t1)
        ...{
            this._t1 = t1;
        }
        public Tuple() : this(default(T1)) ...{}
        public T1 Item_1
        ...{
            get...{return this._t1;}
        }
        public override bool HasType<V>(V v)
    ...{
            return base.HasType<V>(v) || this.JudgeType(this._t1, v);
        }    
    };
    public class Tuple<T1, T2> : Tuple<T1>
    ...{
        T2 _t2;
        public Tuple(T1 t1, T2 t2) : base(t1)
        ...{
            this._t2 = t2;
        }
        public Tuple() : this(default(T1), default(T2)) ...{ }
        public T2 Item_2
        ...{
      get...{return this._t2;}
        }
        public override bool HasType<V>(V v)
        ...{
            return base.HasType<V>(v) || base.JudgeType(this._t2, v);
        }
    };

在這裡要說明一下protected bool JudgeType<T, V>(T t, V v)函數,它非常簡單就是判斷兩個類型是否一致.不過要注意它的實現return typeof(T).Equals(v.GetType());其中T代表Tuple中的類型它使用typeof得到類型而v用GetType得到類型.這是因為GetType拿到的是對象的真實類型,而typeof(T)是對象基類型.



class A1 ...{} 
class A2 : A1 ...{}

Tuple<A2> t = new Tuple<A2>();
A1 a1 = new A2();
t.HasType(a1);                    //返回true

如果return typeof(T).Equals(typeof(V));會返回false,因為V被認成是A1而不是A2.



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved