体现多态的三种方式:虚方法、抽象类、接口
虚方法:在父类中使用virtual关键字修饰的方法(在父类方法的返回值前写virtual),在子类中可以使用override关键字对该虚方法进行重写
namespace VirtualFunction
{
class CatType
{
public virtual void Cry()
{
Console.WriteLine("我会叫");
}
}
class Tiger : CatType
{
public override void Cry()
{
base.Cry();
Console.WriteLine("咆哮");
}
}
class Cat : CatType
{
public override void Cry()
{
base.Cry();
Console.WriteLine("喵");
}
}
class Program
{
static void Main(string[] args)
{
Tiger t = new Tiger();
t.Cry();
Console.WriteLine( );
Cat c = new Cat();
c.Cry();
Console.ReadLine();
}
}
}
里式转换原则
(1)子类对象可以直接赋值给父类变量
//旧版方式
Cat c = new Cat();
c.Cry();
//里式转换
CatType ct= new Cat();
ct.Cry();
(2)子类对象可以调用父类中的成员,但是父类对象永远只能调用自己的成员
(3)如果父类对象中装的是子类对象,可以将这个父类对象强制转换成子类对象
CatType ct= new Cat();
Cat c2 = (Cat)ct;
is和as
is如果转换成功,则返回true,否则返回false
CatType ct= new Cat();
bool a1 = ct is Cat;
Console.WriteLine(a1);//True
bool a2 = ct is Tiger;
Console.WriteLine(a2);//Fales
as如果转换成功,返回对应的对象,失败返回null
CatType ct= new Cat();
if (ct as Cat==null)
{
Console.WriteLine("转换失败");
}
else
{
Console.WriteLine("转换成功");
}