自定义转换

博客介绍了对自定义的结构或类定义显示或隐式转换的相关内容,指出隐式转换中public static必不可少,还提及隐式转换关键字implicit、操作关键字operator以及显示转换关键字explicit。

对自定义的结构或者类定义显示或隐式转换

隐式转换  public static是必不可少的

隐式 关键字 implicit

操作 关键字 operator 

 

 class Program
    {
        static void Main(string[] args)
        {
            

            Dog D2 = new Dog("DD2");
            Cat C2 = D2;//已经在Dog类中定义了隐式转换
            C2.PrintName();
            C2.Speak();

        }

    }
    abstract public class Pet
    {
        protected string Name;
        public Pet(string name)
        {
            Name = name;
        }
        public void PrintName()
        {
            Console.WriteLine("Print" + Name);
        }

       
        abstract public void Speak();
    }
    public class Dog : Pet
    {
        static int Num;
        static Dog()
        {
            Num = 0;
        }
        public Dog(string name) : base(name)
        {
            ++Num;
        }
        new public void PrintName()
        {
            Console.WriteLine("子print名字是 " + base.Name);
        }
        //override public void Speak()
        sealed override public void Speak()
        {
            Console.WriteLine("子说,我是狗狗 " + Name);
        }
        static public void ShowNum()
        {
            Console.WriteLine("Dog's number = " + Num);
        }
        public void Lost()
        {
            --Num;
            Console.WriteLine(Name + " is Lost!");
        }

        public static implicit operator Cat(Dog dog)//隐式转换
        {
            return new Cat(dog.Name);
        }
    }
 public class Cat : Pet,IPlayWoolBall,IEatFish
    {
        public Cat(string name):base(name)
        {
            
        }
        new public void PrintName()
        {
            Console.WriteLine("子Print我的名字是 " + Name);
        }
        override public void Speak()
        {
            Console.WriteLine("子说,我是猫猫 " + Name);
        }
        public void PlayWoolBall()
        {
            Console.WriteLine(Name+" play wool ball");
        }
        public void EatFish()
        {
            Console.WriteLine(Name+" eat fish");
        }
    }

 

显示转换 关键字 explicit

 class Program
    {
        static void Main(string[] args)
        {
             Cat c3 = new Cat("CC3");
            Dog D3 = (Dog)c3;//把cat强制的转化成一只Dog
            D3.PrintName();
            D3.Speak();

        }

    }
    abstract public class Pet
    {
        protected string Name;
        public Pet(string name)
        {
            Name = name;
        }
        public void PrintName()
        {
            Console.WriteLine("Print" + Name);
        }

       
        abstract public void Speak();
    }
    public class Dog : Pet
    {
        static int Num;
        static Dog()
        {
            Num = 0;
        }
        public Dog(string name) : base(name)
        {
            ++Num;
        }
        new public void PrintName()
        {
            Console.WriteLine("子print名字是 " + base.Name);
        }
        //override public void Speak()
        sealed override public void Speak()
        {
            Console.WriteLine("子说,我是狗狗 " + Name);
        }
        static public void ShowNum()
        {
            Console.WriteLine("Dog's number = " + Num);
        }
        public void Lost()
        {
            --Num;
            Console.WriteLine(Name + " is Lost!");
        }

       
    }
 public class Cat : Pet,IPlayWoolBall,IEatFish
    {
        public Cat(string name):base(name)
        {
            
        }
        new public void PrintName()
        {
            Console.WriteLine("子Print我的名字是 " + Name);
        }
        override public void Speak()
        {
            Console.WriteLine("子说,我是猫猫 " + Name);
        }
        public void PlayWoolBall()
        {
            Console.WriteLine(Name+" play wool ball");
        }
        public void EatFish()
        {
            Console.WriteLine(Name+" eat fish");
        }
        public static explicit operator Dog(Cat cat)//显式转换
        {
            return new Dog(cat.Name);
        }
    }

 

转载于:https://www.cnblogs.com/cicily/p/10935155.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值