一種類型占位符,或稱之為類型參數。我們知道一個方法中,一個變量的值可以作為參數,但其實這個變量的類型本身也可以作為參數。泛型允許我們在調用的時候再指定這個類型參數是什么。在.net中,泛型能夠給我們帶來的兩個明顯好處是——類型安全和減少裝箱、拆箱。
例如:通常一個方法或過程的簽名都是有明確的數據類型的。
如 :
public void ProcessData(int i){}
public void ProcessData(string i){}
public void ProcessData(decimal i){}
public void ProcessData(double i){}
等。
這些方法的簽名中的:int ,string,decimal,double 都是明確的數據類型,程序員訪問這些方法的過程中需要提供提定類型的參數:
ProcessData(123);
ProcessData("abc");
ProcessData("12.12")
而如果我們將int ,string,decimal,double這些類型也當成一種參數傳給方法的時候方法的定義便是這樣:
public void ProcessData<T>(T i){} //T是int ,string,decimal,double這些數據類型的指代
用戶在調用的時候便成了這樣:
ProcessData<string>("abc");
ProcessData<int>(123);
ProcessData<double>(12.23);
這與通常的那些定義的最大區別是,方法的定義實現過程只有一個。但是它具有處理不同的數據類型數據的能力。
C# 2.0中有如List<>等泛型對象都具有此特性。
具有泛型機制的軟件開發平臺及語言
.Net 平臺 2.0及以上版本
JAVA 5及以上版本
泛型的好處:
泛型是c#2.0的一個新增加的特性,它為使用c#語言編寫面向對象程序增加了極大的效力和靈活性。它允許程序員將一個實際的數據類型的規約延遲至泛型的實例被創建時才確定。泛型為開發者提供了一種高性能的編程方式,能夠提高代碼的重用性,并允許開發者編寫非常優雅的解決方案。
數據層:
public List<libs.Model.Artitle> GetAllArt()
{
List<libs.Model.Artitle> list = new List<Artitle>();
string sqlconn = System.Configuration.ConfigurationSettings.AppSettings["sqlconn"];
SqlConnection conn = new SqlConnection(sqlconn);
string sqlstr = "select titleid,Title,author,company,Uploaddate,isVidate,conimages,content from writings order by titleid asc";
SqlCommand cmd = new SqlCommand (sqlstr,conn);
try
{
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
libs.Model.Artitle artles = new Artitle();
artles.Titleid = int.Parse(reader["titleid"].ToString());
artles.Title = reader["title"].ToString();
artles.Uploaddate = DateTime.Parse(reader["Uploaddate"].ToString());
list.Add(artles);