在C#中,類型轉換分為隱式類型轉換(Implicit Type Conversion)和顯式類型轉換(Explicit Type Conversion),也稱為隱式轉換和強制轉換。
隱式類型轉換(Implicit Type Conversion)
隱式類型轉換是編譯器自動執行的,不需要程序員明確指定。當一種類型的數據可以安全地轉換為另一種類型時,編譯器會自動進行隱式轉換。這種轉換不會導致數據丟失或改變數據的意義。
以下是一些常見的隱式類型轉換示例:
- 整數類型之間的轉換:從小到大的整數類型(如
byte
到int
,int
到long
)可以隱式轉換。
byte b = 10;
int i = b; // 隱式轉換,byte到int
- 浮點類型之間的轉換:
float
到double
的轉換是隱式的。
float f = 3.14f;
double d = f; // 隱式轉換,float到double
- 整數到浮點數的轉換:整數類型(如
int
)可以隱式轉換為浮點數類型(如float
或double
)。
int number = 10;
double floatingNumber = number; // 隱式轉換,int到double
- 常量表達式中的轉換:在編譯時常量表達式中,如果值的范圍適合目標類型,則可以進行隱式轉換。
double result = 3.0 / 2; // 隱式轉換,整數3和2在運算時提升為double類型
- 空值到引用類型的轉換:將
null
值賦給引用類型變量是隱式的。
string str = null; // 隱式轉換,null到string
顯式類型轉換(Explicit Type Conversion)
顯式類型轉換需要程序員明確指定,通常使用類型轉換運算符(如(Type)
)來執行。這種轉換可能會丟失數據或改變數據的意義,因此需要程序員自行承擔風險。
以下是一些常見的顯式類型轉換示例:
- 整數類型之間的轉換:從大到小的整數類型轉換需要顯式轉換,因為可能會丟失數據。
int i = 256;
byte b = (byte)i; // 顯式轉換,int到byte,數據丟失(b的值為0)
- 浮點類型到整數類型的轉換:浮點數轉換為整數類型時,小數部分會被丟棄。
double d = 3.14;
int i = (int)d; // 顯式轉換,double到int,i的值為3
- 引用類型之間的轉換:當嘗試將一種引用類型轉換為另一種不兼容的引用類型時,需要顯式轉換(通常通過接口或基類進行)。
Animal animal = new Dog(); // Dog是Animal的子類
Dog dog = (Dog)animal; // 顯式轉換,Animal到Dog(如果animal實際上引用的是Dog對象,則成功)
- 對象到基本數據類型的轉換:如果對象包含可以轉換為基本數據類型的數據,可以通過調用適當的方法(如
Parse
或TryParse
)或進行拆箱來執行顯式轉換。
string str = "123";
int number = int.Parse(str); // 顯式轉換,string到int
在編寫代碼時,應謹慎使用顯式類型轉換,并確保轉換是安全的,以避免運行時錯誤或數據丟失。