c泛型為什麼能解決裝箱拆箱問題,C 中泛型的作用是什麼?

2022-02-14 22:50:42 字數 3304 閱讀 5979

1樓:匿名使用者

1. 使用非泛型集合時引發的裝箱和拆箱操作

var array = new arraylist();

array.add(1);

array.add(2);

foreach (int value in array)

」,value);

}**宣告瞭一個arraylist物件,向arraylist中新增兩個數字1,2;然後使用foreach將arraylist中的元素列印到控制檯。

在這個過程中會發生兩次裝箱操作和兩次拆箱操作,在向arraylist中新增int型別元素時會發生裝箱,在使用foreach列舉arraylist中的int型別元素時會發生拆箱操作,將object型別轉換成int型別,在執行到console.writeline時,還會執行兩次的裝箱操作;這一段**執行了6次的裝箱和拆箱操作;如果arraylist的元素個數很多,執行裝箱拆箱的操作會更多。

你可以通過使用ilspy之類的工具檢視il**的box,unbox指令檢視裝箱和拆箱的過程

2. 使用泛型集合的情況

請看如下**:

var list = new list();

list.add(1);

list.add(2);

foreach (int value in list)

", value);

}**和1中的**的差別在於集合的型別使用了泛型的list,而非arraylist;我們同樣可以通過檢視il**檢視裝箱拆箱的情況,上述**只會在console.writeline()方法時執行2次裝箱操作,不需要拆箱操作。

可以看出泛型可以避免裝箱拆箱帶來的不必要的效能消耗;當然泛型的好處不止於此,泛型還可以增加程式的可讀性,使程式更容易被複用等等。

本文使用的c#**如下:

using system;

using system.collections;

using system.collections.generic;

namespace boxorunbox

static void box()

static void unbox()

static void lookatarraylist()

", value);}}

static void lookatgenericlist()

", value);}}}}

2樓:草薙在

泛型不發生裝箱,因為clr會為每一個值型別生成一個全新的封閉泛型,也就是生成testtesttest等等型別,所以使用的時候不需要拆裝箱

3樓:匿名使用者

泛型 根據泛型型別引數 會在執行時產生多個型別test這個型別為型別模板,當使用是根據你的使用產生多個基於test的型別 而當t=int是

產生的新型別中所有使用t的位置會替換為int,所以不存在裝箱與拆箱的問題

泛型 也可以理解為執行時模板型別,根據型別引數替換模板內型別變數

4樓:匿名使用者

你要明白裝箱拆箱只是在值型別與引用型別相互轉換的時候才發生的,值轉引用叫裝箱,引用轉值類稱拆箱。兩種型別的記憶體處理機制是不同的,因此不能直接拿來用的。

我們再把話題回到你剛說的例子上,如果test的建構函式的形參是引用型別必然發生裝箱操作,值型別是不會的這類操作的。

泛型為什麼不會呢,很簡單,你在定義範型物件的時候要明確指定傳入時的具體型別,所以相同型別之間當然不用裝拆箱之類的操作了,這也是為什麼使用範型能夠提升效能的重要原因了。

c#實體類中如何定義泛型集合型別的屬性?

5樓:最紳士的痞子灬

1、型別,就是用來描述資料在計算機裡「儲存的格式」。例如,5與「5」,對人來說是一碼事,對計算機來說就是兩碼事,因為它們儲存在計算機裡面的「格式」不一樣。因為c#是一種強型別語言,你得在使用資料前,明確告訴c#這些資料的「格式」,也就是型別。

2、簡單點、不是很全面地來解釋範型,範型猶如一個「容器」類,用來裝載一些「已知的基本型別」的類,這些被裝載的基本類,是明確的、簡單的、基本型別的類。

3、例如,一個範型集合類,裡面可以「裝載」一些已明確為string型別的類,那就是list;反之,如果「裝載」著沒有明確型別的類,比如list,語義沒問題,用起來也差別不大,但那就不是範型了!

4、範型「裝載」著已明確型別的類,所以主要兩個好處:

一是,可以更容易實現型別安全,減少各種程式錯誤。例如,你不經意間為list增加一個int型別元素時,程式就會盡職地報錯,而list就不會報錯了,增加了產生未知錯誤的機率。

二是,大家知道集合啊,陣列啊,都是引用型別,如果它們「裝載」值型別的類時,可能會產生裝箱與拆箱操作(可以理解為值型別與引用型別互轉),而範型能避免這個操作所帶來的效能損失,記住哦,頻繁地裝箱與拆箱操作,會帶來比較嚴重的效能問題滴。

6樓:匿名使用者

分頁類按這樣定義就可以了,也就是class名字後面加個:

public class pageclass}

什麼是泛型?他有什麼優點?

7樓:drar_迪麗熱巴

泛型。即通過引數化型別來實現在同一份**上操作多種資料型別。泛型是在c#2.

0引入的。泛型(genericity)的字面意思是指具有在多種資料型別上皆可操作的含意,與模板有些相似。

優點:泛型類和泛型方法同時具備可重用性、型別安全和效率,這是非泛型類和非泛型方法無法具備的。泛型通常用與集合以及作用於集合的方法一起使用。

泛型是c#2.0的一個新增加的特性,它為使用c#語言編寫物件導向程式增加了極大的效力和靈活性。不會強行對值型別進行裝箱和拆箱,或對引用型別進行向下強制型別轉換,所以效能得到提高。

泛型是程式設計語言的一種特性。允許程式設計師在強型別程式設計語言中編寫**時定義一些可變部分,那些部分在使用前必須作出指明。各種程式設計語言和其編譯器、執行環境對泛型的支援均不一樣。

8樓:匿名使用者

更加安全,避免裝箱拆箱操作

c#中泛型的作用是什麼?

9樓:自殺

泛型copy(generic)是c#語言2.0和通用語言運bai

行時(clr)的一個新特du性。泛型為.net框架引入了型別引數(zhitype parameters)的概念。

型別引數使得設計dao類和方法時,不必確定一個或多個具體引數,其的具體引數可延遲到客戶**中宣告、實現。這意味著使用泛型的型別引數t,寫一個類mylist,客戶**可以這樣呼叫:mylist, mylist或 mylist。

這避免了執行時型別轉換或裝箱操作的代價和風險

c泛型有什麼作用,C 泛型的意義是什麼?

比如泛型容器可以儲存不同型別的元素物件 c 泛型的意義是什麼?範型的意義在於免去了型別之間互相轉換的系統開銷,和同類方法的過載,比如,add方法你要過載兩個方法 int和double 或者更多方法,用範型只用寫一個add方法就可以完成int,double,float.等等的相加,再如,集合的操作,沒...

為什麼涼了的燒餅會發硬?怎樣才能解決?

澱粉的老化。並不是失水,熱的燒餅立刻真空密封,冷凍也會發生,澱粉的老化,這是分子層面的物理反應。加熱後澱粉鏈還會再次斷裂吸水。澱粉在有水參與 水分含量大於30 的情況下加熱,會逐漸膨脹吸水,粘度增加。直到到達一個溫度時,體積會突然間劇烈膨脹,粘度也開始急劇攀升。這個溫度我們稱為糊化溫度,這之前和以後...

求教高手聯想3000 c100為什麼裝不了XP系統

可能是你沒有完全刪除掉visit的原因,你找一張xp的原版盤,就是裝的特別慢的那種,用電腦光碟機帶起來,把c盤徹底格式化了,然後再用ghost盤裝就可以了,因為windows系統只能升級不能降級,意思是你如果裝win7直接裝就行,如果裝xp必須把原來的系統格式化了,或者你買張功能全點的ghost盤,...