自定义转换

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

隐式转换  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