您好,登錄后才能下訂單哦!
如何理解ASP.NET 2.0泛型,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
C#2.0作為#1.X的升級版本,為我們引入了很多新的而且很實用的特性。最重要的當屬ASP.NET 2.0泛型(Generics)、匿名方法(Anonymous Methods)、迭代器(Iterators)和局部類(partial Types)。這些新特性在提供高度兼容性的同時,也在很大程度上提高了代碼的效率和安全性。
本節(jié)我們學習有關于ASP.NET 2.0泛型的內(nèi)容。泛型存在的必要性:在1.X版本中,為了能適應不同類型的參數(shù)引入,我們常常需要重寫一些函數(shù),或者常常將其object化,以達到函數(shù)的通用性。但往往帶給我們的是程序性能的下降和重復性勞動的增加。泛型的出現(xiàn)很好的解決了這個問題。其實簡單的講,泛型是一種可以傳遞或者靈活規(guī)范參數(shù)類型的機制。
泛型需要命名空間System.Collections.Generic的支持,可應用于類、方法、結構、接口、委托等設計中,集復用性、類型安全、高效率于一身。下面我們分別舉例來看看泛型的幾種使用方法。
1、ASP.NET 2.0泛型方法
using System; using System.Collections.Generic; public class GenericMethod { // 靜態(tài) 泛型方法 public static string Output〈T 〉(T t) { return "類型:" + t.GetType(). ToString() + ";值:" + t.ToString(); } } public partial class Generic_Method : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Response.Write(GenericMethod.Output 〈int 〉 (23) + "〈br / 〉 "); Response.Write(GenericMethod.Output 〈DateTime 〉 (DateTime.Now) + "〈br / 〉 "); } }
2、ASP.NET 2.0泛型抽象類
using System; using System.Collections.Generic; // 泛型抽象類 public abstract class GenericParent { // 泛型抽象方法,返回值為一個泛型, 加一個約束使泛型X要繼承自泛型Y public abstract X Output〈 X, Y 〉 (X x, Y y) where X : Y; // 泛型抽象方法,返回值為一個string類型, 加一個約束使泛型X要繼承自IListSource public abstract string Output2〈 X 〉 (X x) where X : System.ComponentModel. IListSource; } public class GenericChild : GenericParent { // 重寫抽象類的泛型方法 public override T Output〈 T, Z 〉 (T t, Z z) { return t; } // 重寫抽象類的泛型方法 public override string Output2〈 T 〉 (T t) { return t.GetType().ToString(); } } public partial class Generic_Abstract : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { GenericChild gc = new GenericChild(); Response.Write(gc.Output〈 string, IComparable 〉 ("aaa", "xxx")); Response.Write("〈 br / 〉 "); Response.Write(gc.Output2〈 System.Data.DataTable 〉 (new System.Data.DataTable())); Response.Write("〈 br / 〉 "); } }
3、ASP.NET 2.0泛型接口
using System; using System.Collections.Generic; // 泛型接口 public interface IGenericInterface〈T 〉 { T CreateInstance(); } // 實現(xiàn)上面泛型接口的泛型類 // 派生約束where T : TI(T要繼承自TI) // 構造函數(shù)約束where T : new()(T可以實例化) public class Factory〈T, TI 〉 : IGenericInterface〈TI 〉 where T : TI, new() { public TI CreateInstance() { return new T(); } } public partial class Generic_Interface : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { IGenericInterface〈System.ComponentModel. IListSource 〉factory = new Factory〈System.Data.DataTable, System.ComponentModel.IListSource 〉(); Response.Write(factory.CreateInstance(). GetType().ToString()); Response.Write("〈br / 〉"); } }
4、ASP.NET 2.0泛型委托
using System; using System.Collections.Generic; public class GenericDelegate { // 聲明一個泛型委托 public delegate string OutputDelegate 〈T 〉(T t); // 定義一個靜態(tài)方法 public static string DelegateFun (string s) { return String.Format("Hello, {0}", s); } // 定義一個靜態(tài)方法 public static string DelegateFun (DateTime dt) { return String.Format("Time, {0}", dt.ToString()); } } public partial class Generic_Delegate : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // 使用泛型委托 GenericDelegate.OutputDelegate〈string 〉 delegate1 = new GenericDelegate.OutputDelegate 〈string 〉(GenericDelegate.DelegateFun); Response.Write(delegate1("aabbcc")); Response.Write("〈br / 〉"); // 使用泛型委托(匿名方法) GenericDelegate.OutputDelegate〈DateTime 〉 delegate2 = GenericDelegate.DelegateFun; Response.Write(delegate2(DateTime.Now)); } }
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。