C#中类的显示类型转换和隐式类型转换

weblog 5189 0 0
栗子
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            Stone s = new Stone(1000);
            Monkey m = (Monkey)s;
        }
    }

    class Stone
    {
        public int age;
        public Stone(int age)
        {
            this.age = age;
        }
    }

    class Monkey
    {
        public int age;
        public Monkey(int age)
        {
            this.age = age;
        }
    }
}

上述案例是通不过编译的,因为Stone和Monkey没有任何继承关系

显示类型转换操作符
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            Stone s = new Stone(1000);
            Monkey m = (Monkey)s;
            Console.WriteLine(m.age);
        }
    }

    class Stone
    {
        public int age;
        public Stone(int age)
        {
            this.age = age;
        }

        public static explicit operator Monkey(Stone s)
        {
            Monkey m = new Monkey(s.age / 100);
            return m;
        }
    }

    class Monkey
    {
        public int age;
        public Monkey(int age)
        {
            this.age = age;
        }
    }
}

可以编译和运行

隐式类型转换
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            Stone s = new Stone(1000);
            Monkey m = s;
            Console.WriteLine(m.age);
        }
    }

    class Stone
    {
        public int age;
        public Stone(int age)
        {
            this.age = age;
        }

        public static implicit operator Monkey(Stone s)
        {
            Monkey m = new Monkey(s.age / 100);
            return m;
        }
    }

    class Monkey
    {
        public int age;
        public Monkey(int age)
        {
            this.age = age;
        }
    }
}

 编译运行成功


猜你喜欢
weblog 1024 mysql数据库日期date数值int一、dateintSELECTUNIX_TIMESTAMP(now())二、intdateSELECTFROM_UNIXTIME(1578636398)上述都精确到秒值
weblog 3063 c#数据 c#数据分为值引用有包括(结构体,枚举) 引用又包括(,数组,接口,委托c#数据派生谱系 值
official 775 RabbitMQ作为一个消息队列提供一个通用消息发送接收平台,并且保证消息在传输过程安全可靠。消息(Message)由Client发送,RabbitMQ接收到消息之后通过交发到对应
算法基础 1871 如果一个实现了一个接口,如何获取接口实际importjava.lang.reflect.ParameterizedType; importjava.lang.reflect.Type
算法基础 1190 c#对象json字符串usingSystem; usingSystem.Runtime.Serialization.Json; usingSystem.IO; usingSystem.Text
java基础 4184 (class)接口(interface)数组byte: byte数据是8位、有符号,以二进制补码表整数; 最小值是-128(-2^7); 最大值是127(2^7-1); 默认值是0; byt
weblog 1008 mysql整数范围MySQL支持多种数据,大致可以分为三:数值、日期/时间字符串(字符)。其,整数包括:TINYINT、SMALLINT、MEDIUMINT、INT
java虚拟机(jvm) 5704 1.内部名在许多情况下,一种只能是或接口。例如,一个、由一个实现接口,或者由一个方法抛出异常就不能是基元或数组,必须是或接口。这些在已编译用内部名字表
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。