【转】override和new的区别?
2012-06-18 16:10
232 查看
先看下面这段代码的输出:
class ClassA
{
public virtual void WriteString()
{
Console.WriteLine("ClassA类virtual WriteString");
}
public void Write()
{
Console.WriteLine("ClassA类void Write");
}
}
class ClassB : ClassA
{
public override void WriteString()
{
Console.WriteLine("ClassB类override void WriteString");
}
public new void Write()
{
Console.WriteLine("ClassB类new void Write");
}
}
class WatinConsoleExample
{
[STAThread]
static void Main(string[] args)
{
ClassB b = new ClassB();
ClassA a = (ClassA)b; //转换为其类
a.WriteString(); //ClassB中用override实现,输出为: ClassB类override void WriteString
a.Write(); // ClassB中用new实现,输出为: ClassA类void Write
Console.ReadLine();
}
}
上面这段代码的输出结果为:
ClassB类override void WriteString
ClassA类void Write
由此得出结论:
1.派生类中用new实现基类的同名方法,把派生类强制转换为基类型时,将调用基类中的实现;
2.相反,派生类中用override 实现基类的virtual 同名方法,把派生类强制转换为基类型时,仍将调用派生类自己的实现。
转自star163的博客,原文地址http://www.cnblogs.com/finejob/articles/970957.html
class ClassA
{
public virtual void WriteString()
{
Console.WriteLine("ClassA类virtual WriteString");
}
public void Write()
{
Console.WriteLine("ClassA类void Write");
}
}
class ClassB : ClassA
{
public override void WriteString()
{
Console.WriteLine("ClassB类override void WriteString");
}
public new void Write()
{
Console.WriteLine("ClassB类new void Write");
}
}
class WatinConsoleExample
{
[STAThread]
static void Main(string[] args)
{
ClassB b = new ClassB();
ClassA a = (ClassA)b; //转换为其类
a.WriteString(); //ClassB中用override实现,输出为: ClassB类override void WriteString
a.Write(); // ClassB中用new实现,输出为: ClassA类void Write
Console.ReadLine();
}
}
上面这段代码的输出结果为:
ClassB类override void WriteString
ClassA类void Write
由此得出结论:
1.派生类中用new实现基类的同名方法,把派生类强制转换为基类型时,将调用基类中的实现;
2.相反,派生类中用override 实现基类的virtual 同名方法,把派生类强制转换为基类型时,仍将调用派生类自己的实现。
转自star163的博客,原文地址http://www.cnblogs.com/finejob/articles/970957.html
相关文章推荐
- 温故而知新:new与override的差异以及virtual方法与abstract方法的区别
- override和new的区别?
- C# 的 new 和 override 区别
- C#.NET中new, override, virtual abstract关键字的区别
- override与new的区别
- 浅析C# new和override的区别
- 浅析C#中new、override、virtual关键字的区别
- new与override区别
- C#中重写(override)和覆盖(new)的区别
- Sealed,new,virtual,abstract与override的区别
- override 和 new 的区别
- new 和override 重写区别
- 实例讲解override和new的区别
- C# 中virtual,override,new 的区别与用法(转载)
- 浅析C#中new、override、virtual关键字的区别
- C# new override 的区别
- c#中new和override的区别
- 关于“重写”和“隐藏”,override和new的区别(转)
- c#中virtual,new和override的区别
- 黄聪:c# override,new关键字区别与使用(学习笔记)