前言
在 C# 中,變量在聲明后就無法再次聲明或無法分配另一種類型的值,除非該類型可以隱式轉(zhuǎn)換為變量的類型。但有時(shí)我們可能需要將值復(fù)制到其他類型的變量或方法參數(shù)中。這意味著我們需要對(duì)類型進(jìn)行轉(zhuǎn)換操作,而在 C# 中,可以通過哪些方式實(shí)現(xiàn)類型的轉(zhuǎn)換。
類型轉(zhuǎn)換
1、隱式轉(zhuǎn)換
這種轉(zhuǎn)換是自動(dòng)進(jìn)行的,不需要特殊語法,因?yàn)檗D(zhuǎn)換始終會(huì)成功,并且不會(huì)丟失任何數(shù)據(jù)。一般是發(fā)生在從較小整數(shù)類型到較大整數(shù)類型的轉(zhuǎn)換以及從派生類到基類的轉(zhuǎn)換。
float pi=3.14;
// 隱式轉(zhuǎn)換
double qty=pi;
int i = pi;
// 隱式轉(zhuǎn)換
long num = i;
public class BasePrint
{
public void Message()
{
Console.WriteLine("基礎(chǔ)打印");
}
}
public class BarcodePrint: BasePrint
{
public void BarcodeMessage()
{
Console.WriteLine("條碼打印");
}
}
BarcodePrint barcode = new BarcodePrint();
// 隱式轉(zhuǎn)換
BasePrint base = barcode;
引用類型的隱式轉(zhuǎn)換,它是從一個(gè)類轉(zhuǎn)換為該類的任何一個(gè)直接或間接的基類或接口的情況。因?yàn)榕缮愂冀K包含基類的所有成員,所以能隱式轉(zhuǎn)換。
2、顯式轉(zhuǎn)換
這種轉(zhuǎn)換需要明確指出,通常涉及到范圍較小的類型到范圍較大的類型,或者可能丟失信息的轉(zhuǎn)換。顯式轉(zhuǎn)換也稱為強(qiáng)制轉(zhuǎn)換。double price = 234.70;
int qty;
// 強(qiáng)制將 double 轉(zhuǎn)換 int.
qty = (int)price;
public class ZTextBox:TextBox
{
}
ZTextBox txtProduct = new ZTextBox();
// 顯式將 ZTextBox 轉(zhuǎn)換為 TextBox
TextBox txtBoxcode = (TextBox)txtProduct;
3、類型轉(zhuǎn)換方法
對(duì)于類型轉(zhuǎn)換方法,下面我們了解幾種方法來進(jìn)行類型轉(zhuǎn)換。
// 日期轉(zhuǎn)字符串
string today = Convert.ToString(DateTime.Now);
// 字符串轉(zhuǎn)數(shù)值
double price = Convert.ToDouble("231.40");
// 數(shù)值0轉(zhuǎn)布爾值
bool result = Convert.ToBoolean(0);
使用該方法需要類型提供了Parse方法。如int.Parse、double.Parse等。// 字符串轉(zhuǎn)日期
DateTime dateTime = DateTime.Parse("2024-01-11");
// 字符串轉(zhuǎn)數(shù)值
double price = double.Parse("231.40");
// 字符串true轉(zhuǎn)為布爾值
bool result = bool.Parse("true");
// 字符串嘗試轉(zhuǎn)日期
DateTime.TryParse("2024-01-11", out DateTime dateTime);
// 字符串嘗試轉(zhuǎn)數(shù)值
double.TryParse("120.50", out double price);
- ChangeType方法:可以將一個(gè)類型轉(zhuǎn)換為指定的類型。
它是 Convert 類中提供的一個(gè)方法,可以將一個(gè)類型轉(zhuǎn)換為其它類型。long qty = 123;
object result = Convert.ChangeType(qty, typeof(int));
4、用戶定義的轉(zhuǎn)換
用戶定義的轉(zhuǎn)換使用自定義的特殊方法,以支持在不具有基類和派生類關(guān)系的自定義類型之間實(shí)現(xiàn)顯式和隱式轉(zhuǎn)換。通過在類中定義轉(zhuǎn)換運(yùn)算符來定義自己的類型轉(zhuǎn)換規(guī)則。通過在類型中定義 implicit 或 explicit 關(guān)鍵字。// 定義攝氏溫度
Celsius celsius = new Celsius();
// 設(shè)定溫度 20
celsius.Temperature = 20;
// 將攝氏溫度轉(zhuǎn)為華氏溫度
Fahrenheit fahrenheit = (Fahrenheit)celsius;
// 輸出華氏溫度為68
Console.WriteLine(fahrenheit.Temperature);
// 將華氏溫度轉(zhuǎn)為攝氏溫度
Celsius fahrenheitToCelsius = (Celsius)fahrenheit;
// 輸出攝氏溫度為20
Console.WriteLine(fahrenheitToCelsius.Temperature);
/// <summary>
/// 攝氏溫度
/// </summary>
public class Celsius
{
public double Temperature { get; set; }
public static implicit operator Fahrenheit(Celsius celsius)
{
return new Fahrenheit { Temperature = (celsius.Temperature*9 /5)+32};
}
}
/// <summary>
/// 華氏溫度
/// </summary>
public class Fahrenheit
{
public double Temperature { get; set; }
public static implicit operator Celsius(Fahrenheit fahrenheit)
{
return new Celsius { Temperature = (fahrenheit.Temperature-32)*5/9};
}
}
小結(jié)
以上是C#中常見的類型轉(zhuǎn)換方式,每種方式都有其適用的場景和限制。在編程中,應(yīng)根據(jù)不同場景和限制選擇合適的類型轉(zhuǎn)換方法。
該文章在 2024/11/11 10:23:00 編輯過