老的不行的问题想起来了巩固复习一下
首先:
override是重载(有的翻译为覆盖),new是隐藏。
override可以通过父类的引用调用子类的方法,new只能各自调用各自的方法。
再有:
override覆盖虚方法,这样的话,子类里使用了新的方法体(父类方法/函数的功能被子类覆盖);New的话还是使用父类的方法,比如父类有个方法abc(),子类也有一个abc,可以使用new abc()避免编译器警告,但使用父类的abc()
例如:
A a=(A)(new B());//以父类变量引用子类
a.MethodA(); //实际调用的是B.MethodA(); 这个地方其实就说明了 MethodA 被覆盖了,原来父类A的方法在之类中已经不复存在了
a.MethodB(); //调用的是a.MethodB(); 而这个地方,用父类变量访问之类的时候,被new隐藏的MethodB()还是可以被读取出来的。
大概new的方法,大概就类似老大对小弟留了一手
示例代码大家懒得写可以拷贝一下再测试 呵呵
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
public class A
{
public virtual void MethodA()
{
Console.WriteLine("A.MethodA");
}
public void MethodB()
{
Console.WriteLine("A.MethodB");
}
}
public class B : A
{
public override void MethodA()
{
// base.MethodA();
Console.WriteLine("B.MethodA");
}
public new void MethodB()
{
Console.WriteLine("B.MethodB");
}
}
class Program
{
static void Main(string[] args)
{
A A1 = new B();
A1.MethodA();
A1.MethodB();
B B1 = new B();
B1.MethodA();
B1.MethodB();
}
}
}