泛型及泛型應用

2012年4月21日   天氣睛     天氣說變就變   昨天天還陰陰沉沉  大雨傾盆  今天太陽高照   明天又是什麼呢  不管了   坐在電腦旁   人都麻木了   今天有一朋友生日   正好出去轉轉  呼吸一下新鮮空氣。

泛型及泛型應用:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace 泛型
{
    class Program
    {
        static void Main(string[] args)
        {
            DataContians<int> dc = new DataContians<int>();
            dc.Data = 2;
            //dc.Data = "ss";
            //普通類型轉換爲泛型
            ArrayList list = new ArrayList();
            list.Add(1);
            list.Add(2);
            list.Add(3);
            IEnumerable<int> l = list.Cast<int>();//進行轉換
            foreach (int i in l)
            {
                Console.WriteLine(i);
            }

            //調用泛型方法
            Hello<int, string>(1, "sss");

            //泛型委託 調用 泛型方法
            Delegatestring<int,string> d = Hello<int, string>;
            d(1,"aaa");

            //泛型約束
            //泛型對於泛型委託  泛型類 都是一樣的
            createlist<Dog>(3);//泛型無參約束
            personlist<person> p = new personlist<person>();//泛型繼承約束
            personlist<chinese> p1 = new personlist<chinese>();

            //泛型約束之應用  可空類型
            int? nu = 3;//對於可空類型  系統會把他轉換爲Nullable<int>   Nullable<T>   int?編譯器會自動翻譯Nullable<int>
            if (nu.HasValue)
            {
                Console.WriteLine(nu.Value);
            }
            //用代碼簡單實現一下  可空類型   具體代碼  往下看
            MyNullable<int> nul = new MyNullable<int>();
            nul.Hasvalue = true;
            nul.value = 3;
            //泛型應用之懶對象   Lazy<T>   vs2010纔有的   爲了提高性能儘量減少內存佔用  一個對象沒使用之前  不創建   等到使用時再創建   
            person p2 = new person();
            /*..一個對象在創建之後並沒調用他,等執行一段代碼之後再調用減少內存使用(理論上高性能)..*/
            /*一段代碼執行*/
            p2.Hello();
            /*微軟的方法*/
            //只有調用value時才調用類的構造函數
            //只有在該類非常耗內存的情況下  去使用
            //一般不使用
            Lazy<person> p3=new Lazy<person>();//在這裏並沒有調用構造 函數  可以 調試  測試一下
            /*一段代碼執行*/
            p3.Value.Hello();//構造函數在此第一次調用  真的是懶對象

            //用泛型實現Lazy<T>
            MyLazy<person> p4 = new MyLazy<person>();
            p4.value.Hello();//完美實現   代碼往下看  調試的時候  把上面的註釋  Lazy註釋悼

            Console.Read();
        }

        //泛型方法
        static void Hello<T,V>(T t,V v)
        {
            Console.WriteLine(v);
        }
        //public event EventHandler onshang;//泛型事件
        //泛型約束之無參約束
        static List<T> createlist<T>(int n) where T:new()//添加約束  約束爲泛型構造函數爲無參構造函數  好像只能約束無參的
        {
            List<T> list = new List<T>();
            for (int i = 0; i < n; i++)
            {
                T t = new T();//如果不加約束,他就會出錯,因爲他不確定是否有無參構建函數
                list.Add(t);
            }
            return list;
        }
    }
    //泛型約束之繼承約束
    class personlist<T> where T : person//T的類型只能是person類或person類的子類
    {
    }
    public class DataContians<v>//約定一個特定類型
    {
        public v Data { get; set; }//所有用到類型的地方  可以用v代替
    }
    delegate void Delegatestring<T,T1>(T t,T1 t1);//泛型委託
    class Dog
    {
        public Dog()
        {
        }
    }
    class person
    {
   //     public int age;
        public person()
        {
            Console.WriteLine("被構造 了");
        }
        public void Hello()
        {
            Console.WriteLine("Hello");
        }
    }
    class chinese : person
    {

    }
    class MyNullable<T> where T : struct
    {
        public bool Hasvalue{get;set;}
        public T value { get; set; }
    }
    class MyLazy<T> where T:new()
    {
        private T instance;
        public T value
        {
            get
            {
                if(instance==null)
                {
                    instance=new T();
                }
                return instance;
            }
        }
    }//default(T)返回一個類型的的默認值  ,一般在寫泛型的時候   有可能用到

}



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