多态性(C# 编程指南)

转载 2011年01月07日 13:39:00

1.使用 new 关键字时,调用的是新的类成员而不是已被替换的基类成员。这些基类成员称为隐藏成员。如果将派生类的实例强制转换为基类的实例,就仍然可以调用隐藏类成员.

public class BaseClass
{
    public void DoWork() { }
    public int WorkField;
    public int WorkProperty
    {
        get { return 0; }
    }
}

public class DerivedClass : BaseClass
{
    public new void DoWork() { }
    public new int WorkField;
    public new int WorkProperty
    {
        get { return 0; }
    }
}
DerivedClass B = new DerivedClass();
B.DoWork();  // Calls the new method.

BaseClass A = (BaseClass)B;
A.DoWork();  // Calls the old method.

2. 为了使派生类的实例完全接替来自基类的类成员,基类必须将该成员声明为虚拟的。这是通过在该成员的返回类型之前添加 virtual 关键字来实现的。然后,派生类可以选择使用 override 关键字而不是 new,将基类实现替换为它自己的实现
public class BaseClass
{
    public virtual void DoWork() { }
    public virtual int WorkProperty
    {
        get { return 0; }
    }
}
public class DerivedClass : BaseClass
{
    public override void DoWork() { }
    public override int WorkProperty
    {
        get { return 0; }
    }
}
DerivedClass B = new DerivedClass();
B.DoWork();  // Calls the new method.

BaseClass A = (BaseClass)B;
A.DoWork();  // Also calls the new method.

使用 Override 和 New 关键字进行版本控制(C# 编程指南)


 

C# 语言经过专门设计,以便不同库中的基类与派生类之间的版本控制可以不断向前发展,同时保持向后兼容。这具有多方面的意义。例如,这意味着在基中引入与派生类中的某个成员具有相同名称的新成员在 C# 中是完全支持的,不会导致意外行为。它还意味着类必须显式声明某方法是要重写一个继承方法,还是一个仅隐藏具有类似名称的继承方法的新方法。

C# 允许派生类包含与基类方法名称相同的方法。

  • 基类方法必须定义为 virtual

  • 如果派生类中的方法前面没有 new 或 override 关键字,则编译器将发出警告,该方法将有如存在 new 关键字一样执行操作。

  • 如果派生类中的方法前面带有 new 关键字,则该方法被定义为独立于基类中的方法。

  • 如果派生类中的方法前面带有 override 关键字,则派生类的对象将调用该方法,而不调用基类方法。

  • 可以从派生类中使用 base 关键字调用基类方法。

  • overridevirtual 和 new 关键字还可以用于属性、索引器和事件中。

C#编程指南——类的继承、多态性

1. 继承 public class A { } public class B: A { } A:
  • dongyue786
  • dongyue786
  • 2014年10月16日 19:48
  • 640

C#多态性基础实现

多态分为两种情况,一种是编译的时候的多态性,一种是运行时的多态性。 编译时的多态性:编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作...
  • zc474235918
  • zc474235918
  • 2014年02月09日 17:45
  • 2244

C#中多态性的理解

在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。 多态性可以是静态的或动态的。 在静态多态性中,函数的响应是在编译时发生的。 函数重载 运算符重载 在动态多态性中,函数的响...
  • Silk2018
  • Silk2018
  • 2017年04月27日 17:04
  • 660

c#源代码—演示类的继承性,类的多态性

c#源代码—演示类的继承性,类的多态性
  • heyuchang666
  • heyuchang666
  • 2016年01月13日 11:51
  • 757

发现MSDN里面一个好东西:C# 编程指南

ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_csref/html/ac0f23a2-6bf3-4077-be99-538a...
  • JOHNCOOLS
  • JOHNCOOLS
  • 2006年11月02日 09:41
  • 708

接口(C# 编程指南)

接口包含类或结构可以实现的一组相关功能的定义。 例如,使用接口可以在类中包括来自多个源的行为。 由于C#语言不支持多重继承,所以该功能很重要。 此外,如果要模拟结构的继承,也必须使用接口,因为它...
  • softuse
  • softuse
  • 2016年04月28日 18:26
  • 284

WPF 编程指南 C#2010版 源代码

这是我画了几个月的时间精心准备的资料,如果对你有帮助请顶一下, 如果有什么好的建议或意见也可以在留言中说出来,大家共同学习,进步。谢谢大家。   源代码地址:http://download.cs...
  • smart819819
  • smart819819
  • 2012年11月25日 00:08
  • 2484

[C#]利用接口实现多态性浅析

所谓的多态性,个人认为说的是相同的程序接受几段毫不相同的参数而能正常的运行。而在C#中利用接口实现多态性我觉得并不是太严谨。我认为要真正实现多态性离不开泛型。 举个小例子: public ...
  • hsppl
  • hsppl
  • 2011年09月05日 20:34
  • 1252

SDUT2679 6-1 多态性与虚函数

6-1 多态性与虚函数#include using namespace std;class Pet { public: virtual void speak()//定义基类函数为虚函数 ...
  • yue_luo_
  • yue_luo_
  • 2016年10月28日 15:40
  • 499

c# 多态性

首先理解一下什么叫多态。同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。多态性通过派生类覆写基类中的虚函数型方法来实现。 多态性分为两种,一种是编译时的多态性,一种是运行...
  • juhengfei
  • juhengfei
  • 2008年09月17日 09:48
  • 187
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多态性(C# 编程指南)
举报原因:
原因补充:

(最多只允许输入30个字)