对于new和override的理解
来源:互联网 发布:成功瘦身知乎 编辑:程序博客网 时间:2024/04/29 15:20
在成功的道路上,你没有耐心去等待成功的到来,那么,你只好用一生的耐心去面对失败。
Override 和 New :
在同一个声明中使用new和override修饰符是错误的。
隐藏一个继承成员并不被认为是错误的,但是会造成编译器给出警告。
为了禁止这个警告,派生类成员的声明可以包括一个new修饰符来指出派生成员要隐藏基成员。
eg: (注:此例摘自MSDN,但此例并没有具体说明new和override的区别)
* 假定公司 A 创建了一个名为 A 的类,您的程序使用该类:
class A
{
public virtual void DrawLine() { }
public virtual void DrawPoint() { }
}
* 您的公司使用此类,并且您在添加新方法时将其用来派生自己的类:
class B : A
{
public void DrawRectangle() { }
}
* 您在应用程序的使用过程中没有遇到任何问题,
直到公司 A 发布了 A 的新版本,该新版本类似如下:
class A
{
public virtual void DrawLine() { }
public virtual void DrawPoint() { }
public virtual void DrawRectangle() { }
}
* 现在,一旦使用 A 的新版本重新编译应用程序,
您将收到来自编译器的警告(不会产生错误)
如果想用您的方法重写新的基类方法,请使用 override 关键字
class B : A
{
public override void DrawRectangle() { }
}
override 关键字可确保B 的任何对象
都将使用 DrawRectangle 的派生类版本。
* B的对象仍可以使用 base 关键字访问 DrawRectangle 的基类版本。
base.DrawRectangle();
* 或者,也可以通过在派生类定义中使用关键字 new 来防止出现该警告
class B : A
{
public new void DrawRectangle() { }
}
* 使用 new 关键字告诉编译器您的定义将隐藏基类中包含的定义。
new成员的声明只是在new成员的范围内隐藏继承的成员。
下面具体说明new 和override的区别
using System;
namespace N
{
class A
{
public void F()
{
Console.WriteLine("A");
}
}
class B : A
{
public new void F()
{
Console.WriteLine("B");
}
}
class C
{
static void Main()
{
A a = new A();
B b = new B();
A bb = new B();
a.F();
b.F();
bb.F();
Console.ReadLine();
}
}
}
结果: A
B
A
类B中的方法用了new后,以 B b = new B();方式得到的对象b调用了方法F,产生的结果是B
但以A bb = new B();方式得到的对象bb掉用方法F后,产生的结果是A
using System;
namespace N
{
class A
{
public virtual void F()
{
Console.WriteLine("A");
}
}
class B : A
{
public override void F()
{
Console.WriteLine("B");
}
}
class C
{
static void Main()
{
A a = new A();
B b = new B();
A bb = new B();
a.F();
b.F();
bb.F();
Console.ReadLine();
}
}
}
结果:A
B
B
类B中的方法用了override后,以 B b = new B();方式得到的对象b调用了方法F,产生的结果还是B
以A bb = new B();方式得到的对象bb掉用方法F后,产生的结果却变成了B
- 对于new和override的理解
- 说说我理解的override和new的区别
- 简述对new,virture 和override关键字的理解
- override 和 new 的区别
- new和override的区别?
- new和override的区别
- override和new的区别
- new和override的区别
- new 和 override 的区别
- override 和 new的区别
- override和new的区别
- override和new的区别?
- override和new的区别
- override和new的区别
- c#中new和override的区别
- C#-new 和 override 的区别
- c#中,new 和 override 的区别
- C#中new和override的区别
- mysql查看表结构命令
- out.println()和System.out.println()区别转自我的新浪博客
- 用JFreeChart画统计分析曲线图报错分析转自我的新浪博客
- Silverlight 2.0商业案例之银光笔记本商城
- Myeclipse运行Servlet转自我的新浪博客
- 对于new和override的理解
- 关于管理者和执行者 - 说给毕业生的话
- 四年一闰,百年不闰,四百年再闰。转自我的新浪博客
- C#语言中的异步方法调用
- ADSL安装与接入线路布设指南
- 9C失去Wow代理权将促进中国Mangos的繁荣
- struts validate 动态平验证(转自http://hi.baidu.com/twobrushes/blog/item/ff088fdd66d484305982dda4.html)
- 遭遇sprintf导致的堆栈崩溃。不使用sprintf_s()的代价
- 闷----