`
zhangziyangup
  • 浏览: 1187234 次
文章分类
社区版块
存档分类
最新评论

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#多态性的介绍

    在C#中,多态性(Polymorphism)是一种重要的面向对象编程特性,它允许子类重写或扩展父类的方法,从而实现同一接口的不同实现方式。多态性意味着一个接口可以具有多种形态,这在程序设计中极为灵活且强大,它提高了...

    C#多态性实验报告详细讲解

    **C#多态性实验报告详细讲解** C#是一种面向对象的编程语言,其中多态性是其核心特性之一。本实验报告旨在深入理解和实践C#中的多态性,通过设计一个银行卡类(BankCard)及其派生类(ForeignCard,LimitedCard),...

    关于多态性的经典例子

    在C#中,多态性主要体现在两个方面:编译时多态和运行时多态。编译时多态主要是通过方法重载(Overloading)实现,而运行时多态则依赖于方法重写(Overriding)和接口实现。 二、方法重载 方法重载允许我们在同一个...

    c#中应用多态的计算器

    总的来说,这个“C#中应用多态的计算器”示例深入浅出地解释了如何在实际项目中利用多态性提高代码的灵活性和可维护性。通过学习这个例子,开发者可以更好地理解和掌握面向对象编程的核心概念,并将其应用于自己的...

    C#多态性.doc_入门教程

    C#中的多态性是面向对象编程的核心特性之一,它允许一个类的对象可以被视为它的基类类型或实现的接口类型。这种能力使得代码更加灵活,能够处理不同类型的对象,而无需知道具体的类型细节。在C#中,每种类型都具有多...

    C#程序设计实验7-类继承-虚拟和重写.docx

    实验总结,通过这个实验,学生不仅能够理解类和继承的结构,还掌握了如何利用`virtual`和`override`关键字实现方法的重写,以及如何在实际代码中实现多态性。这为将来开发更复杂、更灵活的C#应用程序奠定了基础。

    c#类与对象的继承与多态——图形间的继承关系

    在这个例子中,多态性使得我们可以对形状列表中的每一个对象调用相同的方法,即使它们的类型不同。这就是面向对象编程中的“鸭子类型”原则:如果它走起来像鸭子,叫起来也像鸭子,那它就是鸭子。 最后,考虑到"类...

    用一个示例来说明C#中的继承、封装和多态

    `Speak`方法的重写展示了多态性,同一个方法在不同对象上调用产生了不同结果。封装则体现在我们只能通过`Name`和`Age`属性来访问和修改动物的名称和年龄,而不是直接访问私有变量。 通过这个简单的示例,我们可以...

    多型与虚拟.pdf

    而运行时多态则是通过虚函数(Virtual Function)或接口(Interface)实现,这种多态性需要等到程序运行时才能确定具体调用哪个方法。 虚拟关键字在C++中用于声明虚函数,使得子类可以重写这些函数并保持调用的正确...

    C#中面向对象编程机制之多态学习笔记

    继承多态性分为两种形式:通过虚拟方法和抽象方法实现。 - **通过虚拟方法实现的多态**(`virtual`, `override`): 基类中定义的虚拟方法(`virtual`)可以在派生类中被重写(`override`),这样就可以根据对象的...

    多态的实现及虚函数

    这种机制确保了多态性,使得程序能够根据实际对象的类型动态调用正确的方法。 #### 多态的应用场景 多态在软件设计中扮演着至关重要的角色,尤其在需要处理不确定类型对象的场合下: 1. **代码复用**:通过继承和...

    asp.net c#面向对象虚拟工厂程序

    多态性使我们能够在不同的对象上调用相同的方法,但得到不同的结果。抽象类(Abstract Class)和接口(Interface)用于定义规范,强制子类实现特定的方法。 三层架构是软件设计中常见的模式,它将应用分为三个主要...

    C#(17/58)

    `virtual`关键字是实现多态性的一个关键元素,它使得方法在运行时可以被动态绑定,从而实现智能重写。虚拟方法不是简单地覆盖,而是根据对象实例的实际类型决定调用哪个方法。 继承是多态的基础,因为它允许派生类...

    C#画图程序

    在C#中,多态性主要通过方法重写(Override)和方法重载(Overload)来体现。在画图程序中,`Draw()`方法可能是所有形状类的一个抽象或虚拟方法,在基类`Shape`中声明,而每个子类可以根据自身的特性进行重写,实现...

    C#程序设计-1期 C#程序设计,参考资源_常见问题.pdf

    在提供的代码示例中,`Swap`函数接受`object`类型的引用参数,这是为了实现多态性。但是,由于`Dog`类没有显式地继承自`object`,编译器无法保证安全性,因为`Dog`对象和`object`之间存在类型不匹配。如果`Swap`函数...

    c#学习方法

    - 多态性:掌握多态的概念及其在代码复用中的作用。 - 面向接口编程:理解接口的作用,并学会如何使用它们来设计软件。 - 字符串基础:熟悉字符串的创建、操作以及常见API的使用。 3. **.Net框架原理**: - ...

    第面向对象的高级编程PPT学习教案.pptx

    - C#中的多态性可以通过继承、抽象类和接口实现。 - **虚拟方法**(`virtual`)和**重写**(`override`)是实现多态的关键,前者在基类中声明,后者在扩充类中使用以改变基类方法的行为。 - **隐藏基类方法**(`...

    C#经典面向对象测试题

    根据给定的C#代码示例,我们可以从中提取并总结出一些重要的面向对象编程概念以及相关的C#...这些示例不仅展示了C#语言的基本特性,还深入探讨了面向对象编程的核心概念,如继承、多态性、构造函数、虚方法与重写等。

    第7章--继承和接口设计-习题.docx

    总之,C#中的继承和接口设计是实现面向对象编程的关键工具,它们提供了代码组织、扩展性和多态性。继承允许类之间形成层次结构,接口则强制实现了特定方法集,增强了灵活性。了解和熟练掌握这些概念对于编写高效、可...

Global site tag (gtag.js) - Google Analytics