溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解ASP.NET 2.0泛型

發(fā)布時間:2021-11-26 17:42:22 來源:億速云 閱讀:132 作者:柒染 欄目:編程語言

如何理解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è)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI