一種類型占位符,或稱之為類型參數(shù)。我們知道一個(gè)方法中,一個(gè)變量的值可以作為參數(shù),但其實(shí)這個(gè)變量的類型本身也可以作為參數(shù)。泛型允許我們?cè)谡{(diào)用的時(shí)候再指定這個(gè)類型參數(shù)是什么。在.net中,泛型能夠給我們帶來(lái)的兩個(gè)明顯好處是——類型安全和減少裝箱、拆箱。
例如:通常一個(gè)方法或過(guò)程的簽名都是有明確的數(shù)據(jù)類型的。
如 :
public void ProcessData(int i){}
public void ProcessData(string i){}
public void ProcessData(decimal i){}
public void ProcessData(double i){}
等。
這些方法的簽名中的:int ,string,decimal,double 都是明確的數(shù)據(jù)類型,程序員訪問(wèn)這些方法的過(guò)程中需要提供提定類型的參數(shù):
ProcessData(123);
ProcessData("abc");
ProcessData("12.12")
而如果我們將int ,string,decimal,double這些類型也當(dāng)成一種參數(shù)傳給方法的時(shí)候方法的定義便是這樣:
public void ProcessData<T>(T i){} //T是int ,string,decimal,double這些數(shù)據(jù)類型的指代
用戶在調(diào)用的時(shí)候便成了這樣:
ProcessData<string>("abc");
ProcessData<int>(123);
ProcessData<double>(12.23);
這與通常的那些定義的最大區(qū)別是,方法的定義實(shí)現(xiàn)過(guò)程只有一個(gè)。但是它具有處理不同的數(shù)據(jù)類型數(shù)據(jù)的能力。
C# 2.0中有如List<>等泛型對(duì)象都具有此特性。
具有泛型機(jī)制的軟件開發(fā)平臺(tái)及語(yǔ)言
.Net 平臺(tái) 2.0及以上版本
JAVA 5及以上版本
泛型的好處:
泛型是c#2.0的一個(gè)新增加的特性,它為使用c#語(yǔ)言編寫面向?qū)ο蟪绦蛟黾恿藰O大的效力和靈活性。它允許程序員將一個(gè)實(shí)際的數(shù)據(jù)類型的規(guī)約延遲至泛型的實(shí)例被創(chuàng)建時(shí)才確定。泛型為開發(fā)者提供了一種高性能的編程方式,能夠提高代碼的重用性,并允許開發(fā)者編寫非常優(yōu)雅的解決方案。
數(shù)據(jù)層:
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);