把new、virtual、override说透

我们先看下面一段程序:

/// <summary>
   /// 父类
/// 作者:周公
/// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/09/02/2864429.aspx
/// 日期:2008-09-01
   /// </summary>
   public class Father
   {
     public void Run0()
     {
       Console.WriteLine("Father.Run0");
     }
   }
   /// <summary>
/// 子类
/// 作者:周公
/// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/09/02/2864429.aspx
/// 日期:2008-09-01
   /// </summary>
   public class Son:Father
   {
     public void Run0()
     {
       Console.WriteLine("Son.Run0");
     }
}
class Program
   {
     static void Main(string[] args)
     {
     Father[] fatherList = new Father[2];
       fatherList[0] = new Father();
       fatherList[1] = new Son();
       fatherList[0].Run0();
       fatherList[1].Run0();
   }
}

程序的运行结果是:

Father.Run0
Father.Run0

稍微细心的朋友可能发现在Son类的Run0方法下面有一段棕色的波浪线,当我们把鼠标放到该下划线上时,会看到下面的提示(编译程序时在程序的“输出”窗口也能看到这个警告):

“MethodDemo.Son.Run0()”隐藏了继承的成员“MethodDemo.Father.Run0()”。如果是有意隐藏,请使用关键字new。

如图:

时间: 2024-10-07 13:35:45

把new、virtual、override说透的相关文章

C# [method Modifiers] abstract virtual override new

abstract :表示方法是抽象方法,在子类中必须重写.抽象方法所在的类必须是抽象类,即用abstract modifiers:virtual:表示此方法是virtual方法,除了在子类中可以重写外(在子类中也可直接使用),和普通方法完全一样:override:表示重写父类的virtual方法:new: 显式隐藏从基类继承的成员: 区别: virtual:标记方法为虚方法1.可在派生类中以override覆盖此方法2.不覆盖也可由对象调用3.无此标记的方法(也无其他标记),重写时需用new隐藏

new,virtual,override,interface,delegate,event-------------C#——方法实现总结

C#--方法实现总结 本文分两部分来写,第一部分:C#方法实现的理解与问题,第二部分:C#中方法实现的种类. 第一部分:C#方法实现的理解与问题 理解: 1. 使用virtual和override关键字,在基类和派生类中用同样的方法签名实现不同的方法 2.  使用interface接口,在不同的类中,用相同的方法签名实现不同的方法 3.  用委托delegate,把不同类中的方法集合在一起,然后一起调用,完成某种综合的功能 4.  使用事件,完成跟委托一样的功能 以上四条全都说明了面向对象的多态

C#多态小结——面向对象编程的三大机制之二

C#的多态性: 我的理解是:同一个操作,作用于不同的对象时,会有不同的结果,即同一个方法根据需要,作用于不同的对象时,会有不同的实现. C#的多态包括:接口多态,继承多态. 其中继承多态又包括通过虚拟方法实现的多态和通过抽象方法实现的多态性 例如:基类动物都有吃的方法,但是不同的动物吃的东西就会不一样,例如狼吃肉,羊吃草,这样"吃"的这个方法就要在派生类里面重新实现以下,运行时,通过指向基类的指针,来调用实现派生类中的方法. 接下来举例实现多态性. 1. 接口多态性 把动物"

继承中关于属性的一些问题

和类的成员方法一样,我们也可以定义属性的重载.虚属性.抽象属性以及密封属性的概念. 与类和方法一样,属性的修饰也应符合下列规则: 属性的重载 ●在派生类中使用修饰符的属性,表示对基类中的同名属性进行重载. ●在重载的声明中,属性的名称.类型.访问修饰符都应该与基类中被继承的属性一致. ●如果基类的属性只有一个属性访问器,重载后的属性也应只有一个.但如果基类的属性同时包含get和set属性访问器,重载后的属性可以只有一个,也可以同时有两个属性访问器. 注意:与方法重载不同的是,属性的重载声明实际上

基于C#的接口基础教程之五

第五节.实现接口 1.显式实现接口成员 为了实现接口,类可以定义显式接口成员执行体(Explicit interface member implementations).显式接口成员执行体可以是一个方法.一个属性.一个事件或者是一个索引指示器的定义,定义与该成员对应的全权名应保持一致. using System ;interface ICloneable { object Clone( ) ;}interface IComparable { int CompareTo(object other)

深入剖析C#继承机制(2)

继承 四.多级继承 一些面向对象语言允许一个类从多个基类中继承,而另一些面向对象语言只允许从一个类继承,但可以随意从几个接口或纯抽象类中继承. 只有C++支持多级继承,许多程序员对此褒贬不一.多级继承常会引起继承来的类之间的混乱,继承而来的方法往往没有唯一性,所以C#中类的继承只可以是一个,即子类只能派生于一个父类,而有时你必须继承多个类的特性,为了实现多重继承必须使用接口技术,下面是对接口的多重继承进行介绍: using System ;//定义一个描述点的接口interface IPoint

JAVA程序员眼里的C#

程序|程序员 Java developer's view of C#.September 03, 2004 There are two ways to compare programming languages: a religious war and a "we just don't care" type of attitude. I will try to find the middle ground and start with generalities. The key fea

深入剖析C#继承机制6

继承 五.继承与访问修饰符 访问修饰符是一些关键字,用于指定声明的成员或类型的可访问性.类的继承中有四个访问修饰符: public protected internal private.使用这些访问修饰符可指定下列五个可访问性级别: public protected internal internal protected private. 声明的可访问性 意义 public 访问不受限制. protected 访问仅限于包含类或从包含类派生的类型. internal 访问仅限于当前项目. pro

C#事件的声明

事件的声明格式: attributes event-modifiers event type variable-declarators; attributes event-modifiers event type member-name {event-accessor-declarations} 事件的修饰符event-modifier可以是: ●new ●public ●protected ●internal ●private ●static ●virtual ●sealed ●overrid