欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#使用虚拟方法实现多态

程序员文章站 2022-10-25 19:47:22
本文实例讲述了c#使用虚拟方法实现多态。分享给大家供大家参考。具体分析如下: 我们看一个例子,假若有一个动物类,类中用方法cry()描述动物的叫声,不同的动物的叫声是不一...

本文实例讲述了c#使用虚拟方法实现多态。分享给大家供大家参考。具体分析如下:

我们看一个例子,假若有一个动物类,类中用方法cry()描述动物的叫声,不同的动物的叫声是不一样的。根据继承的特征,把类中公共部分的内容放在父类中,那么cry()方法就应该放在父类中,根据这样的思路编写程序如下:

using system;
class anmial
{
public void cry()
{
console.writeline("这是动物的叫声");
}
}
class dog: anmial
{
public void run()
{
  console.writeline("狗路得快");
}
}
class cat: anmial
{
public void look()
{
  console.writeline("猫长得乖");
}
}
class test
{
static void main()
{
  dog mydog = new dog();
  mydog.cry();
  mydog.run();
  cat mycat = new cat();
  mycat.cry();
  mycat.look();
  console.readkey();
}
}

运行后发现狗和猫的叫声是相同的,都是调用了父类cry()方法。现在希望在同一个方法cry()能够体现出不同动物的叫声,那么在子类就应该重新描述cry(),也就是重写cry()方法。

重写方法就是修改它的实现,或者在派生类中对它进行重写。在父类中用virtual 关键字声明的方法在子类中可以重写,就是虚拟方法。虚拟方法的语法如下:

访问修饰符 virtual 返回类型 方法名()
{
//方法体
}

在父类中声明的虚拟方法,在子类中重写时用override关键字,就是将virtual关键字改成override,然后修改方法体中的代码即可。

我们修改上面的代码:

using system;
class anmial
{
  public virtual void cry()
{
console.writeline("这是动物的叫声");
}
}
class dog: anmial
{
public override void cry()
{
console.writeline("这是狗的叫声汪汪");
}
}
class cat: anmial
{
public override void cry()
{
console.writeline("这是猫的叫声喵喵");
}
}
class test
{
static void main()
{
  dog mydog = new dog();
  mydog.cry();
  cat mycat = new cat();
  mycat.cry();
  console.readkey();
}
}

注意:父类方法的访问级别和子类重写方法的访问级别相同,即它们应该有相同的访问修饰符。
例如:

public virtual void hello()

不能重写为:

private override void hello()

希望本文所述对大家的c#程序设计有所帮助。