在C#中多态的使用方法有两种,一种是方法隐藏,也就是在子类中通过new关键字来定义新的子类成员替换掉父类成员,另一种是方法重写。
方法隐藏:
class MyClassOne
{
public void Num()
{
Console.WriteLine(100);
}
}
class MyClassTwo:MyClassOne
{
public new void Num()
{
Console.WriteLine(200);
}
}
在上述代码中,子类的无参方法中加入了new关键字,这样在调用时,父类的方法就会被隐藏,默认调用子类中的方法,但如果我们这是需要调用子类的方法就可以通过下列方式来实现:
MyClassOne cl = new MyClassTwo();
cl.Num();
在方法的隐藏过程中,”=”左边引用的是父类还是子类就决定了在调用是调用的是父类的方法还是子类的方法。
方法重写:
方法重写有两个过程,
首先要将父类的方法定义成虚方法,也就是给方法加入virtual关键字,其次将子类的方法加入override关键字,还要注意的是方法的重写时,子类和父类的方法的返回值类型方法名和参数必须完全相同,子类方法的可访问行不能小于父类方法的可访问性,具体操作如下:
class MyClassOne
{
public virtual void Num()
{
Console.WriteLine(100);
}
}
class MyClassTwo:MyClassOne
{
public override void Num()
{
Console.WriteLine(200);
}
}
不同于方法隐藏的是,执行如下代码时,被调用的方法将是子类的方法:
MyClassOne cl = new MyClassTwo();
cl.Num();
注意:
sealed修饰方法只能与override一起使用,可以避免重写的方法被再次重写。