日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#中什么是泛型

發布時間:2023/12/1 C# 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中什么是泛型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
所謂泛型是指將類型參數化以達到代碼復用提高軟件開發工作效率的一種數據類型。
一種類型占位符,或稱之為類型參數。我們知道一個方法中,一個變量的值可以作為參數,但其實這個變量的類型本身也可以作為參數。泛型允許我們在調用的時候再指定這個類型參數是什么。在.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);
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
conn.Close();
}
return list;
}
邏輯層:
public List<Artitle> GettitleAll()
{
return new libs.DAL.ArtileAccess().GetAllArt();
}
web層調用:
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(); //或者直接調用數據庫層:
//this.Repeater1.DataSource = new libs.DAL.ArtileAccess().GetAllArt();
this.Repeater1.DataBind();
}

泛型較為廣泛地被討論,這里寫到的只是作為新手的入門級認識。
泛型最常應用于集合類。
泛型的一個顯而易見的優點在于可以在許多操作中避免強制轉換或裝箱操作的成本或風險,拿ArrayList這個集合類來說,為了達到其通用性,集合元素都將向上轉換為object類型,對于值類型,更是有裝箱拆箱的成本:
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操作就是裝箱,具體過程是把值類型從棧中彈出,放入堆中,同時把在堆中的地址壓入到棧中,頻繁出現這樣的操作,成本比較大。

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

另一個比較常用的泛型集合類是Dictionary<T,T>,用于保存鍵值對:
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);
}
}

轉載于:https://www.cnblogs.com/Nine4Cool/p/4249159.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。