C#之自己定义的implicit和explicit转换

C#之自己定义的implicit和explicit转换

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

在类型转换时常会遇到隐式转换和显式转换。那我们自己定义的类型要怎样去定义隐式转换和显式转换?我们来看一段代码

public class Rational
    {
        private Int32 _inner_int = 0;

        public Rational()
        {

        }

        public Rational(Int32 num)
        {
            this._inner_int = num;
        }


        public Int32 ToInt32() { return this._inner_int; }

        // Implicitly constructs and returns a Rational from an Int32 
        public static implicit operator Rational(Int32 num)
        {
            return new Rational(num);
        }

        // Explicitly returns an Int32 from a Rational 
        public static explicit operator Int32(Rational r)
        {
            return r.ToInt32();
        }

        public override string ToString()
        {
            //return base.ToString();
            String s = String.Format("{0}", this._inner_int);
            return s;
        }
    }

測试代码

  class Program
    {
        static void Main(string[] args)
        {
            Rational r1 = 10;          
            Console.WriteLine(r1);       

            Int32 i = r1;     
            Console.WriteLine(i);       
            Console.ReadLine();
        }
    }

这时编辑会报错,见下图

C#之自己定义的implicit和explicit转换

从提示能够看到,是由于Int32 i=r1时缺少了显式转换。如今我们加入显示转换,改动后的代码及输出结果例如以下:
C#之自己定义的implicit和explicit转换

结果正常输出为10.

那为什么会这样呢?究其原因是在Rational转换成 Int32时,指定了explicit(显式的),所以必需要指定转换类型Int32。假设将explicit换成implicit(隐式),原来的代码将能够正常执行。

改动后的Rational

 public class Rational
    {
        private Int32 _inner_int = 0;

        public Rational()
        {

        }

        public Rational(Int32 num)
        {
            this._inner_int = num;
        }


        public Int32 ToInt32() { return this._inner_int; }

        // Implicitly constructs and returns a Rational from an Int32 
        public static implicit operator Rational(Int32 num)
        {
            return new Rational(num);
        }

        // Explicitly returns an Int32 from a Rational 
        public static <span style="color:#ff0000;">implicit</span> operator Int32(Rational r)
        {
            return r.ToInt32();
        }

        public override string ToString()
        {
            //return base.ToString();
            String s = String.Format("{0}", this._inner_int);
            return s;
        }
    }

測试代码及输出结果

C#之自己定义的implicit和explicit转换

可见explicit和implicit影响着类型的显式转换和隐式转换。

事实上在Rational r1=10已经运行了隐式转换,相应的转换代码例如以下:

 // Implicitly constructs and returns a Rational from an Int32 
        public static implicit operator Rational(Int32 num)
        {
            return new Rational(num);
        }

假设将implicit换成explicit,Rational r1=10也将会报错(能够自行測试)。

转载请注明出处:http://blog.csdn.net/xxdddail/article/details/38057563

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/118136.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • mysql商品表设计_商品数据库表设计

    mysql商品表设计_商品数据库表设计1.建库2.建表新建一个查询,粘贴下列代码,选中执行商品分类表:(主键没有自增)商品表:(主键没有自增)模型图:3.交叉查询

  • 斑马条码打印机gk888t如何使用_斑马打印机gk888cn安装驱动教程

    斑马条码打印机gk888t如何使用_斑马打印机gk888cn安装驱动教程1、样子2、下载驱动,安装,一直next,next点击安装打印机,选择GK888t下一步,选择usb点击完成,进入下面页面安装文字然后一直下一步,下一步,直到完成。完成之后,进行测试。

  • Jmeter进行稳定性测试[通俗易懂]

    Jmeter进行稳定性测试[通俗易懂]首先,创建你要进行稳定性测试的脚本我创建的脚本树如下:2.场景设置LOGIN使用事务循环控制器线程组设置并发用户数200在启动1s,200并发用户全部启动循环设置为永远采用调度器:有两种工作方式1.设置启动和结束时间2.设置持续时间,我设置的是10小时给登录接口设置个timer:timer信息如下:目标吞吐量:24000TPS/MIN=400tp

  • arm指令周期_arm指令sub

    arm指令周期_arm指令sub1.大部分算术运算和逻辑运算指令都是单周期的,例如加法、减法、位级运算和移位2.乘法指令根据操作数位数的不同,从2-5个周期都有可能。3.无条件跳转语句和跳转语句成功跳转,需要重新填充流水线,因此至少需要3个周期4.跳过条件不满足的指令只需要花1个周期(以上周期应该是指各指令包含的机器周期数)时钟周期:振荡周期,即CPU主频。机器周期:又称CPU周期,完…

  • Zuul网关_zuul网关的作用

    Zuul网关_zuul网关的作用首先我们要知道为什么要使用网关呢?先复习一下之前说过的微服务的知识,最开始我们运行微服务就是三个重要部分1.服务端2.消费端3.注册中心首先用户在消费端发出消息,这个时候就需要负载均衡器Ribbon去调配服务,而且要使用到Hystrix去保护服务器,以免访问过多出现服务器过载,及时进行服务降级,然后我们通过消费端访问服务端的方法在最开始的时候使用的是RestTemplate去访问,当时是直接调配这个方法去访问,现在改进了一下,有Feign的出现,把Ribbon,Hystrix,还有RestTemp

  • TXS0104E电平转换工作原理_电平指示芯片

    TXS0104E电平转换工作原理_电平指示芯片TXB0304作为新一代自动识别方向的电平转换芯片,跟上一代同类器件TXB0104相比,具有更低的工作电压(0.9V)、更高的转换速率(1.8V-3.3V间电平转换时最高速率140MBPS)、以及更小的封装等优势。也正是因为需要在较低工作电压时也能达到较高的转换速率,芯片在某些关键参数设计上,也跟上一代产品有所不同,比如ONE-SHOT输出电路的MOS管内阻必须要设计得更小一些。这就要求在某些特殊情况下应用时(比如输出PCB走线较长),需要额外留意电路原理图的设计和PCB布线设计,以减轻输出过冲和震荡的现象

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号