对自定义的结构或者类定义显示或隐式转换
隐式转换 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); } }