先上代码
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!