C# 自己定义 implicit和explicit转换

本文介绍C#中的显式explicit与隐式implicit类型转换运算符的使用方法,包括如何定义及调用这些转换运算符,并通过实例说明了两种转换的区别及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

explicit 和 implicit 属于转换运算符,如用这两者能够让我们自己定义的类型支持相互交换
explicti 表示显式转换。如从 A -> B 必须进行强制类型转换(B = (B)A)
implicit 表示隐式转换,如从 B -> A 仅仅需直接赋值(A = B)

隐式转换能够让我们的代码看上去更美丽、更简洁易懂,所以最好多使用 implicit 运算符。只是!假设对象本身在转换时会损失一些信息(如精度),那么我们仅仅能使用 explicit 运算符,以便在编译期就能警告客户调用

namespace OperatorTest
{
    /// <summary>
    /// 猪
    /// </summary>
    public class Pig
    {
        public Pig(string name)
        {
            this.Name = name;
        }
        public string Name;

        //explicit keyword用于声明必须使用强制转换来调用的用户定义的类型转换运算符。
        //static explicit operator target_type { source_type identifier }
        //target_type 目标类型
        //source_type 源类型
        //identifier Something
        /*转换运算符将源类型转换为目标类型。源类型提供转换运算符。与隐式转换不同。必须通过强制转换的方式来调用显式转换运算符。假设转换操作可能导致异常或丢失信息,则应将其标记为 explicit。

这能够防止编译器无提示地调用可能产生无法预见后果的转换操作*/ public static implicit operator Pig(Monkey value) { Pig mk = new Pig(value.Name + ":猴子变猪!!"); return mk; } }

namespace OperatorTest
{
    /// <summary>
    /// 猴子
    /// </summary>
    public class Monkey
    {
        public Monkey(string name)
        {
            this.Name = name;
        }
        public string Name;

        //implicit keyword用于声明隐式的用户定义类型转换运算符。
        //static implicit operator target_type { source_type identifier }
        public static explicit operator Monkey(Pig value)
        {
            Monkey mk = new Monkey(value.Name + ":猪变猴子!!

"); return mk; } }

调用:

 Monkey monkey = new Monkey("悟空");
            //隐式转换 猴子变猪
            Pig monkeyToPig = monkey;
            MessageBox.Show(monkeyToPig.Name);

            Pig pig = new Pig("八戒");
            //显式转换 猪变猴子
            Monkey pigToMonkey = (Monkey)pig;
            MessageBox.Show(pigToMonkey.Name);

输出:



应用:
比方在实际操作中将一个对象A(或者一个实体)序列化成xml进行存储。那么能够在该对象A的类中定义一个explicit operator,来实现将符合要求的xml内容转换为对象或者实体。
当然也能够在对象A的类中定义一个函数来实现这个处理,只是这样有可能会多出一步,那就是当该函数不是静态函数时,须要先实例化该对象来调用对应的处理函数。


參考:

explicit keyword

implicit keyword

operator keyword


demo下载

转载于:https://www.cnblogs.com/zfyouxi/p/5261791.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值