C# 中的几种类型的转换
|
admin
2024年11月10日 9:32
本文热度 372
|
前言
在 C# 中,变量在声明后就无法再次声明或无法分配另一种类型的值,除非该类型可以隐式转换为变量的类型。但有时我们可能需要将值复制到其他类型的变量或方法参数中。这意味着我们需要对类型进行转换操作,而在 C# 中,可以通过哪些方式实现类型的转换。
类型转换
1、隐式转换
这种转换是自动进行的,不需要特殊语法,因为转换始终会成功,并且不会丢失任何数据。一般是发生在从较小整数类型到较大整数类型的转换以及从派生类到基类的转换。
float pi=3.14;
// 隐式转换
double qty=pi;
int i = pi;
// 隐式转换
long num = i;
public class BasePrint
{
public void Message()
{
Console.WriteLine("基础打印");
}
}
public class BarcodePrint: BasePrint
{
public void BarcodeMessage()
{
Console.WriteLine("条码打印");
}
}
BarcodePrint barcode = new BarcodePrint();
// 隐式转换
BasePrint base = barcode;
引用类型的隐式转换,它是从一个类转换为该类的任何一个直接或间接的基类或接口的情况。因为派生类始终包含基类的所有成员,所以能隐式转换。
2、显式转换
这种转换需要明确指出,通常涉及到范围较小的类型到范围较大的类型,或者可能丢失信息的转换。显式转换也称为强制转换。double price = 234.70;
int qty;
// 强制将 double 转换 int.
qty = (int)price;
public class ZTextBox:TextBox
{
}
ZTextBox txtProduct = new ZTextBox();
// 显式将 ZTextBox 转换为 TextBox
TextBox txtBoxcode = (TextBox)txtProduct;
3、类型转换方法
对于类型转换方法,下面我们了解几种方法来进行类型转换。
// 日期转字符串
string today = Convert.ToString(DateTime.Now);
// 字符串转数值
double price = Convert.ToDouble("231.40");
// 数值0转布尔值
bool result = Convert.ToBoolean(0);
使用该方法需要类型提供了Parse方法。如int.Parse、double.Parse等。// 字符串转日期
DateTime dateTime = DateTime.Parse("2024-01-11");
// 字符串转数值
double price = double.Parse("231.40");
// 字符串true转为布尔值
bool result = bool.Parse("true");
// 字符串尝试转日期
DateTime.TryParse("2024-01-11", out DateTime dateTime);
// 字符串尝试转数值
double.TryParse("120.50", out double price);
- ChangeType方法:可以将一个类型转换为指定的类型。
它是 Convert 类中提供的一个方法,可以将一个类型转换为其它类型。long qty = 123;
object result = Convert.ChangeType(qty, typeof(int));
4、用户定义的转换
用户定义的转换使用自定义的特殊方法,以支持在不具有基类和派生类关系的自定义类型之间实现显式和隐式转换。通过在类中定义转换运算符来定义自己的类型转换规则。通过在类型中定义 implicit 或 explicit 关键字。// 定义摄氏温度
Celsius celsius = new Celsius();
// 设定温度 20
celsius.Temperature = 20;
// 将摄氏温度转为华氏温度
Fahrenheit fahrenheit = (Fahrenheit)celsius;
// 输出华氏温度为68
Console.WriteLine(fahrenheit.Temperature);
// 将华氏温度转为摄氏温度
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};
}
}
小结
以上是C#中常见的类型转换方式,每种方式都有其适用的场景和限制。在编程中,应根据不同场景和限制选择合适的类型转换方法。
该文章在 2024/11/11 10:23:00 编辑过