最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
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();
復制代碼

pk10赛车冠军技巧
最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
摇骰子猜大小 波克捕鱼达人礼兑换码 幸运飞艇视频开奖直播 怎么用租的房子赚钱吗 江西多乐彩十一选五开奖结果 百度知道合伙人行家赚钱 王者荣耀瑶 玩赛车赚钱是真的吗 qq分分彩计划专业版