C#经典语法总结(五)Override 和 New
来源:互联网 发布:大数据分析 职业规划 编辑:程序博客网 时间:2024/05/16 12:54
C# 允许派生类中的方法与基类中的方法具有相同的名称,只要您非常明确应如何处理新方法。下面的示例演示 new 和 override 关键字的使用。
首先声明三个类:一个名为 Car 的基类以及从该基类派生的两个类 ConvertibleCar 和 Minivan。基类包含一个可将有关汽车的描述发送到控制台的方法 (DescribeCar)。派生类方法也包含一个名为 DescribeCar 的方法,该方法显示派生类的独特属性。这些方法还调用基类的 DescribeCar 方法来演示从 Car 类继承属性的方式。
为了强调区别,ConvertibleCar 类使用 new 关键字来定义,而 Minivan 类使用 override 来定义。
C#
// Define the base classclass Car{ publicvirtualvoid DescribeCar() { System.Console.WriteLine("Four wheels and an engine."); }}// Define the derived classesclass ConvertibleCar : Car{ publicnewvirtualvoid DescribeCar() { base.DescribeCar(); System.Console.WriteLine("A roof that opens up."); }}class Minivan : Car{ publicoverridevoid DescribeCar() { base.DescribeCar(); System.Console.WriteLine("Carries seven people."); }}
现在可以编写一些代码来声明这些类的实例,并调用它们的方法以便对象能够描述其自身:
C#
publicstaticvoid TestCars1(){ Car car1 = new Car(); car1.DescribeCar(); System.Console.WriteLine("----------"); ConvertibleCar car2 = new ConvertibleCar(); car2.DescribeCar(); System.Console.WriteLine("----------"); Minivan car3 = new Minivan(); car3.DescribeCar(); System.Console.WriteLine("----------");}
正如预期的那样,输出类似如下所示:
Four wheels and an engine.
----------
Four wheels and an engine.
A roof that opens up.
----------
Four wheels and an engine.
Carries seven people.
----------
但是,在该代码接下来的一节中,我们声明了一个从 Car 基类派生的对象的数组。此数组能够存储 Car、ConvertibleCar 和 Minivan 对象。该数组的声明类似如下所示:
C#
publicstaticvoid TestCars2(){ Car[] cars = new Car[3]; cars[0] = new Car(); cars[1] = new ConvertibleCar(); cars[2] = new Minivan();}
然后可以使用一个 foreach 循环来访问该数组中包含的每个 Car 对象,并调用 DescribeCar 方法,如下所示:
C#
foreach (Car vehicle in cars){ System.Console.WriteLine("Car object: " + vehicle.GetType()); vehicle.DescribeCar(); System.Console.WriteLine("----------");}
此循环的输出如下所示:
Car object: YourApplication.Car
Four wheels and an engine.
----------
Car object: YourApplication.ConvertibleCar
Four wheels and an engine.
----------
Car object: YourApplication.Minivan
Four wheels and an engine.
Carries seven people.
----------
注意,ConvertibleCar 说明与您的预期不同。由于使用了 new 关键字来定义此方法,所调用的不是派生类方法,而是基类方法。Minivan 对象正确地调用重写方法,并产生预期的结果。
若要强制一个规则,要求从 Car 派生的所有类都必须实现 DescribeCar 方法,则应创建一个新的基类,将方法 DescribeCar 定义为 abstract。抽象方法不包含任何代码,仅包含方法签名。从此基类派生的任何类都必须提供 DescribeCar 的实现。有关更多信息,请参见抽象。
- C#经典语法总结(五)Override 和 New
- C# 语法(abstract new override)
- C# new和override
- C# override和new区别
- C# new关键字和override
- C# new和override区别
- C# new和override区别
- C#经典语法总结(二)属性和字段
- C# override和new的区别 (修饰函数时)
- C#中new和override区别
- C#中new和override区别
- c#中new和override的区别
- C#中new和override区别
- C#中的new和override 比较
- C#中的Override 和 New 关键字
- c#中,new 和 override 的区别
- C#中new和override的区别
- C#中new和override区别
- redefinition of default parameter : parameter 5
- C#经典语法总结(三)多态
- VC中调用其它程序的三种方法总结
- C#经典语法总结(四)嵌套类
- SQLServer和Oracle的常用函数对比
- C#经典语法总结(五)Override 和 New
- 幸存者游戏的12条启示
- warning C4172: returning address of local variable or temporary
- 强悍的CronExpression
- C#经典语法总结(六)Equals() 和运算符 == 的重载准则
- Sexy Ruby
- SharePoint on your Phone!
- 一些笔试题目和答案
- 关于ClearQuest7.0(CQ)和Oracle的一个问题