1. <wbr id="m8vu6"></wbr>

      <del id="m8vu6"><center id="m8vu6"><source id="m8vu6"></source></center></del>
        <p id="m8vu6"><sub id="m8vu6"></sub></p>

        VB.net 2010 視頻教程 VB.net 2010 視頻教程 VB.net 2010 視頻教程
        SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
        當前位置:
        首頁 > 編程開發 > .net教程 >
        • ASP.net教程之泛型學習筆記

        • 2019-06-18 22:13 來源:未知

        泛型的好處:類型安全性能高,代碼重用擴展好。

        泛型的使用:如果我們需要使用多個泛型來實例化一個類型,那么我們就需要使用說明性的名稱,比如TId,TFirstName之類的。

        泛型的約束

          where T : struct -類型T必須是值類型

          where T : class -類型T必須是引用類型

          where T : Ifoo -類型T必須執行接口Ifoo

          where T : foo -類型T必須繼承自 foo

          where T : new() -類型T必須有一個默認構造函數

          where T : U -指定泛型類型T1派生于T2。即多個泛型類型之間有繼承關系

        泛型繼承:類可以繼承自泛型基類,泛型類也可以繼承自泛型基類。有一個限制,在繼承的時候,必須顯示指定基類的泛型類型,型如:public class Child<T>:Base<int>{…}

        泛型接口:需要注意的是,在實現接口時需要指定接口的泛型類型。

        泛型方法:跟泛型類差不多,方法在定義的時候使用泛型類型定義參數。調用的時候使用實際類型替換。

        泛型委托:如果我們需要定義的只是一個功能,但是功能的實現要到具體的地方才能確定,我們就可以使用委托,但是使用委托我們的方法返回值和參數類型就確定了,我們可以讓委托具有更高等級的抽象,返回值,參數類型都到具體的地方制定。這里的具體地方就是我們要實現的方法。這樣,我們的委托就具有更高級別的抽象。我們設計的類就具有更高級別的可以用性,我們只需要實現方法的細節就可以了。方法的細節怎么實現,可以使用匿名方法,或者lamda表達式。

         

        這里舉一個自動算工資的例子來講一下泛型委托。先定義一個員工類SalaryPerson,里面包含了一個薪資累加的方法:

         View Code

        定義泛型委托類GenericDelegate:

        復制代碼
         1 public class GenericDelegate
         2  {
         3         //定義泛型委托
         4         public delegate TResult Action<TInput, TResult>(TInput input, TResult result);
         5 
         6         public static TResult GetSalary<TInput, TResult>(IEnumerable<TInput> e, Action<TInput, TResult> action)
         7         {
         8             TResult result = default(TResult);
         9 
        10             foreach (TInput t in e)
        11             {
        12                 result = action(t, result);
        13             }
        14 
        15             return result;
        16         }
        17 }
        復制代碼

        調用代碼:

        復制代碼
         1             List<SalaryPerson> list = new List<SalaryPerson>();
         2             list.Add(new SalaryPerson(1, "Edrick", 5000));
         3             list.Add(new SalaryPerson(1, "Meci", 3000));
         4             list.Add(new SalaryPerson(1, "Jun", 1000));
         5 
         6             //GenericAndDelegate.Action<SalaryPerson, Decimal> a = new GenericAndDelegate.Action<SalaryPerson, Decimal>((m, n) => n += m.Salary);
         7             GenericDelegate.Action<SalaryPerson, Decimal> a = delegate (SalaryPerson sp, decimal s) { return s += sp.Salary; };
         8             //等同于 list.ForEach(m => d += m.Salary);
         9             decimal d = GenericDelegate.GetSalary<SalaryPerson, Decimal>(list, a);
        10             Console.WriteLine(d);
        11             Console.Read();
        復制代碼

        相關教程
        免费看成年人视频大全_免费看成年人视频在线观看