黑马网站上 以及黑马.net光盘上的 多态 方面的教学视频全部是画面和声音不同步的,学起来有点点不舒服,找个下面的一些资料,大家参考学习:
C#语言的三大特性封装、继承、多态,封装与继承相对比较好理解,我们今天主要来介绍一下多态性。C#语言支持两种类型的多态性:
1、编译时的多态性。一个类的对象调用若干同名方法,系统在编译时,根据调用方法的实参类型及实参的个数来决定调用哪个同名方法,实现何种操作。编译时的多态性是通过方法重载来实现的。
2、运行时的多态性。在系统运行时,不同对象调用一个名字形同、参数的类型及个数也完全一样的方法,会完成不同的操作。C#运行时的多态性是通过虚方法实现的。
在类的方法声明前加上“virtual”关键字,这样的方法称为虚方法,反之为非虚方法。
我们通过一个简单例子来看一下虚方法与非虚方法的区别
class Parent
{
//非虚方法
public void SayHello()
{
Console.WriteLine("arent:Hello");
}
//虚方法
public virtual void SayHi()
{
Console.WriteLine("arent:Hi");
}
}
class Child : Parent
{
new public void SayHello()//隐藏基类的非虚方法要使用"new"关键字
{
Console.WriteLine("Child:Hello");
}
public override void SayHi()//隐藏基类的同名虚方法要使用"override关键字"
{
Console.WriteLine("Child:Hi");
}
}
class Program
{
static void Main(string[] args)
{
Parent parent = new Parent();
Child child = new Child();
Parent parent1 = new Child();
parent.SayHello();//调用基类Parent的非虚方法 Parent:Hello
parent1.SayHello();//调用基类Parent的非虚方法 Parent:Hello
child.SayHello();//调用子类Child的非虚方法 Child:Hello
parent.SayHi();//调用基类Parent的虚方法 Parent:Hi
parent1.SayHi();//调用子类Child的虚方法 Child:Hi
child.SayHi();//调用子类Child的虚方法 Child:Hi
Console.ReadKey();
}
}
希望对初学者有所帮助 |