C# 自定义转换implicit和explicit

先上代码

using System;

namespace Object

{

    public class Pet {

        public string name;

        public Pet(string name) {

            this.name = name;

        }

        virtual public void Print()

        {

            Console.WriteLine("virtual print: 这是Pet:" + name);

        }

    }

    public class DOG : Pet

    {

        public DOG(string name) : base(name){

        }

        /**

         * 方法重写

         */

        public override void Print()

        {

            Console.WriteLine("print:派生类方法重写!这是DOG:" + name);

            //base.print();

        }

        public static implicit operator DOG(Cat cat) {//隐式转换,没有函数名,DOG是返回值类型

            return new DOG(cat.name);

        }

    }

    public class Cat : Pet

    {

        public Cat(string name) : base(name) {

        }

        /**

         * 方法重写

         */

        public override void Print()

        {

            Console.WriteLine("print:派生类方法重写!这是cat:" + name);

            //base.print();

        }

        public static explicit operator Cat(DOG g)

        {//显式转换,没有函数名,Cat是返回值类型

            return new Cat(g.name);

        }

    }

    class Program

    {

        static void Main(string[] args)

        {

            DOG dog = new DOG("tom");

            dog.Print();

            Cat cat = (Cat)dog;

            cat.Print();

            DOG dog2 = cat;

            dog.Print();

        }

    }

}

结果

 

注意,隐式转换是

public static implicit operator + 返回值类型+(参数)

显式转换是

public static explicit operator + 返回值类型+(参数)

 

必须是public+static,必须是public+static,必须是public+static!

没有函数名,没有函数名,没有函数名!

别忘了operator,别忘了operator,别忘了operator!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值