C 型別轉換

2021-04-13 07:15:03 字數 2698 閱讀 9513

在程式中,進行型別轉換是常見的事。那麼在

c#中支援以前語言的型別轉換方法,即用型別名進行強行轉換,例如:

object

objtest = new newtype();

newtype newvalue = (newtype)objtest;

但是這樣轉換,有個嚴重的問題,就是在把

objtest

強轉換成

newtype

型別物件的時候,這個過程是不安全的,因此需要用

try-catch

語句來進行保護。這樣一來,比較安全的**方式應該如下所示。

object objtest = new newtype();

newtype newvalue = null;

try

catch( exception err )

但是如上的寫法在

c#中已經屬於過時的寫法,而且也屬於比較低效的寫法。在

c#中比較高效而且安全的寫法,應該用

as操作符,那麼完成如上類似功能的正確**應該如下。

object objtest = new newtype();

newtype newvalue = objtest as newtype;

那麼很明顯,如上的寫法首先看起來很簡便,至少**數量和強轉方式一樣。至於安全性,對於

as

操作符來說,它不會做過的轉換操作,當需要轉換物件的型別屬於轉換目標型別或者轉換目標型別的派生型別的時候,那麼此轉換操作才能成功,而且並不產生新的物件

。因此用

as來進行型別轉換使安全的。為什麼用

as操作符進行型別轉換的效率要高於老式的型別轉換的,因為用

as操作符進行轉換就如前面所說的,首先判斷當前物件的型別,當型別滿足要求後才進行轉換。而傳統的型別轉換方式,是用當前物件直接去轉換,而且為了保護轉換成功,要加上

try-catch

,這就決定了它的效率不會高於

as操作符的效率。

要注意的時候,不管用傳統方式,還是用

as操作符進行型別轉換之後,在使用之前,需要進行判斷轉換是否成功,如下:

if( newvalue!= null )

但是,使用

as操作符有如下幾點限制。

第乙個就是,不用在型別之間進行型別轉化,即如下編寫就會出現編譯錯誤。

newtype newvalue = new newtype();

newtype1 newvalue = newvalue as newtype1;

第二個就是,不能應用在值型別資料,即不能如下寫(也會出現編譯錯誤)。

object objtest = 11;

int nvalue = objtest as

int;

對於第一點所提的,可以用傳統的型別轉換方式來完成,但是光用如下的方式,是不能正確完成。

newtypeone newtestone = new newtypeone();

newtypetwo newtesttwo = (newtypetwo)newtestone;

但是光如上寫是不能完成的,要想使如上的操作能正確完成,在原有型別中增加型別轉換操作符函式,即需要完成類似如下的**。

public

class newtypeone

} 對於第二點所提的,在

c#中可以使用

is操作符,再加上老式的型別轉換操作,就可以安全完成轉換,那麼要完成如上操作,正確的寫法如下。

object objtest = 11;

if( objtest is

int )

除了如上兩點限制外,在用

as操作符來進行型別轉換的時候,有個細微的問題。在前面所說的,用

as來進行型別轉換的時候,所要轉換的物件型別必須是目標型別或者轉換目標型別的派生型別,那麼這樣就有個問題,即用

as操作符來進行型別轉換的時候無法轉換成正確的型別,也就是說本來應該轉換成子型別,卻轉換成了父型別。但是我並不認為這是個嚴重問題,因為在用

as操作符來進行型別轉換的時候,如何選擇目標型別在編碼的時候已經很明確了,即用父型別作為目標型別,那麼型別轉換的目的就是轉換成父型別物件進行操作;反之亦然。

在c#中已經提供了乙個很好的型別轉換方式,那麼在進行型別轉換的時候,可以按照如下的方式進行選擇。

型別轉換

使用選擇

object =>已知引用型別

使用

as操作符來完成

object =>已知值型別

先使用is操作符來進行判斷,再用型別強轉方式進行轉換

已知引用型別之間轉換

首先需要相應型別提供轉換函式,再用型別強轉方式進行轉換

已知值型別之間轉換

最好使用系統提供的

convert

類所涉及的靜態方法

mysql型別轉換c 型別轉換 C 型別轉換

一 簡介 型別轉換 把資料從一種型別轉換另一種型別 我們要求等號兩邊參與運算子必須型別一致,如果不一致,滿足下列條件會發生自動型別轉換或者隱式型別轉換。1.兩種型別相容 例如 int和double 相容 都是數字型別 2.目標型別大於源型別 double int 顯示型別轉換 1.兩種型別相相容 i...

C 型別轉換

型別轉換是將一種型別的值對映為另一種型別的值。型別轉換實際上包含有自動隱含和強制的兩種。型別的自動隱式轉換 c 語言編譯系統提供的內部資料型別的自動隱式轉換規則如下 1.程式在執行算術運算時,低型別可以轉換為高型別。2.在賦值表示式中,右邊表示式的值自動隱式轉換為左邊變數的型別,並賦值給它。3.當在...

C 型別轉換

c風格的強制型別轉換 type cast 很簡單,不管什麼型別的轉換統統是 type b type a。c 風格的型別轉換提供了4種型別轉換操作符來應對不同場合的應用。看似問題複雜化了,其實不然。c風格的型別轉換在程式語句中難以識別,型別轉換是去 const,還是int轉換成char,或是子類指標轉...