您的位置:首页 > 编程语言 > C#

C# override new 的区别

2009-07-15 23:21 309 查看
老的不行的问题想起来了巩固复习一下

首先:

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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: