概述
override 和 new 的作用就是:
如果子类的方法前面带有new关键字,则该方法被定义为独立于基类的方法。
如果子类的方法前面带有override关键字,则子类的对象将调用该方法,而不是调用基类方法。
说简单点就是若方法前面带new,则子类使用该方法时使用的是new的方法,但若子类转型成父类,用的是父类原来的方法。
说简单点就是若方法前面带override,则无论子类是否转型为父类,均会使用override的方法。
若子类的方法没有带new或override则系统默认是new,但会出现警告。使用override,父类对应的方法应该是virtual修饰的。
示例如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Tip94
{
class Program
{
static void Main(string[] args)
{
TestShape();
TestDerive();
TestDerive2();
}
private static void TestShape()
{
Console.WriteLine("TestShapetStart");
List<Shape> shapes = new List<Shape>();
shapes.Add(new Circle());
shapes.Add(new Rectangle());
shapes.Add(new Triangle());
shapes.Add(new Diamond());
foreach (Shape s in shapes)
{
s.MethodVirtual();
s.Method();
}
Console.WriteLine("TestShapetEndn");
}
private static void TestDerive()
{
Console.WriteLine("TestDerivetStart");
Circle circle = new Circle();
Rectangle rectangle = new Rectangle();
Triangle triangel = new Triangle();
Diamond diamond = new Diamond();
circle.MethodVirtual();
circle.Method();
rectangle.MethodVirtual();
rectangle.Method();
triangel.MethodVirtual();
triangel.Method();
diamond.MethodVirtual();
diamond.Method();
Console.WriteLine("TestShapetEndn");
}
private static void TestDerive2()
{
Console.WriteLine("TestDerive2tStart");
Circle circle = new Circle();
PrintShape(circle);
Rectangle rectangle = new Rectangle();
PrintShape(rectangle);
Triangle triangel = new Triangle();
PrintShape(triangel);
Diamond diamond = new Diamond();
PrintShape(diamond);
Console.WriteLine("TestDerive2tEndn");
}
static void PrintShape(Shape sharpe)
{
sharpe.MethodVirtual();
sharpe.Method();
}
public class Shape
{
public virtual void MethodVirtual()
{
Console.WriteLine("base MethodVirtual call");
}
public void Method()
{
Console.WriteLine("base Method call");
}
}
class Circle : Shape
{
public override void MethodVirtual()
{
Console.WriteLine("circle override MethodVirtual");
}
}
class Rectangle : Shape
{
}
class Triangle : Shape
{
public new void MethodVirtual()
{
Console.WriteLine("triangle new MethodVirtual");
}
public new void Method()
{
Console.WriteLine("triangle new Method");
}
}
class Diamond : Shape
{
public void MethodVirtual()
{
Console.WriteLine("Diamond default MethodVirtual");
}
public void Method()
{
Console.WriteLine("Diamond default Method");
}
}
}
}
最后
以上就是温婉枫叶为你收集整理的override 和 new的区别的全部内容,希望文章能够帮你解决override 和 new的区别所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复