日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

C#中什么是泛型

發(fā)布時(shí)間:2023/12/1 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中什么是泛型 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
所謂泛型是指將類型參數(shù)化以達(dá)到代碼復(fù)用提高軟件開發(fā)工作效率的一種數(shù)據(jù)類型。
一種類型占位符,或稱之為類型參數(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);
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
conn.Close();
}
return list;
}
邏輯層:
public List<Artitle> GettitleAll()
{
return new libs.DAL.ArtileAccess().GetAllArt();
}
web層調(diào)用:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.GetallArt();

}
}
public void GetallArt()
{
libs.Log.Artitless atrlesst = new libs.Log.Artitless();
this.Repeater1.DataSource = atrlesst.GettitleAll(); //或者直接調(diào)用數(shù)據(jù)庫(kù)層:
//this.Repeater1.DataSource = new libs.DAL.ArtileAccess().GetAllArt();
this.Repeater1.DataBind();
}

泛型較為廣泛地被討論,這里寫到的只是作為新手的入門級(jí)認(rèn)識(shí)。
泛型最常應(yīng)用于集合類。
泛型的一個(gè)顯而易見(jiàn)的優(yōu)點(diǎn)在于可以在許多操作中避免強(qiáng)制轉(zhuǎn)換或裝箱操作的成本或風(fēng)險(xiǎn),拿ArrayList這個(gè)集合類來(lái)說(shuō),為了達(dá)到其通用性,集合元素都將向上轉(zhuǎn)換為object類型,對(duì)于值類型,更是有裝箱拆箱的成本:
static void Main(string[] args)
{
ArrayList al = new ArrayList();
al.Add(1);
}
在IL中是:
IL_0008: ldc.i4.1
IL_0009: box [mscorlib]System.Int32
IL_000e: callvirt instance int32 [mscorlib]System.Collections.ArrayList::Add(object)
box操作就是裝箱,具體過(guò)程是把值類型從棧中彈出,放入堆中,同時(shí)把在堆中的地址壓入到棧中,頻繁出現(xiàn)這樣的操作,成本比較大。

所以在2.0中,遇到以上的應(yīng)用,應(yīng)該使用泛型集合類List<T>:
static void Main(string[] args)
{
List<int> l = new List<int>();
l.Add(1);
}

另一個(gè)比較常用的泛型集合類是Dictionary<T,T>,用于保存鍵值對(duì):
static void Main(string[] args)
{
Dictionary<int, string> dict = new Dictionary<int, string>();
dict.Add(1, "SomeBook1");
dict.Add(2, "SomeBook2");
dict.Add(3, "SomeBook3");

Console.WriteLine(dict[2]);//output:SomeBook2
dict[2] = "SomeCD1";//modify
Console.WriteLine(dict[2]);//output:SomeCD1

dict.Remove(2);//delete

foreach (KeyValuePair<int, string> kv in dict)
{
Console.WriteLine("Key = {0}, Value = {1}",kv.Key, kv.Value);
}
}

轉(zhuǎn)載于:https://www.cnblogs.com/Nine4Cool/p/4249159.html

總結(jié)

以上是生活随笔為你收集整理的C#中什么是泛型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。