C# new和override的区别分析
在 C# 中,new
和 override
都可以用于继承中方法的重写,它们具有相似的功能,但是在实现上有些区别。
1. new
关键字
new
关键字可以在子类中隐藏基类中已有的同名方法,即子类重写该方法并且使用 new
关键字进行修饰,这样当通过子类对象调用该方法时,就会调用子类中的方法,而不会调用基类中的同名方法。
示例代码:
class BaseClass
{
public void Show()
{
Console.WriteLine("BaseClass.Show() method called.");
}
}
class DerivedClass : BaseClass
{
public new void Show()
{
Console.WriteLine("DerivedClass.Show() method called.");
}
}
class Program
{
static void Main(string[] args)
{
DerivedClass obj = new DerivedClass();
obj.Show();
((BaseClass)obj).Show();
Console.ReadKey();
}
}
运行结果:
DerivedClass.Show() method called.
BaseClass.Show() method called.
在上面的示例代码中,DerivedClass
中的 Show()
方法通过 new
关键字进行了修饰,当通过 DerivedClass
对象调用该方法时,就会调用子类中的方法;当通过 (BaseClass)obj
转换后的对象调用 Show()
方法时,就会调用基类中的同名方法。
2. override
关键字
override
关键字可以在子类中重写基类中同名方法,并且将该方法重新实现,覆盖掉基类中的实现。
示例代码:
class BaseClass
{
public virtual void Show()
{
Console.WriteLine("BaseClass.Show() method called.");
}
}
class DerivedClass : BaseClass
{
public override void Show()
{
Console.WriteLine("DerivedClass.Show() method called.");
}
}
class Program
{
static void Main(string[] args)
{
BaseClass obj1 = new BaseClass();
obj1.Show();
DerivedClass obj2 = new DerivedClass();
obj2.Show();
BaseClass obj3 = new DerivedClass();
obj3.Show();
Console.ReadKey();
}
}
运行结果:
BaseClass.Show() method called.
DerivedClass.Show() method called.
DerivedClass.Show() method called.
在上面的示例代码中,DerivedClass
中的 Show()
方法通过 override
关键字进行了修饰,当通过 DerivedClass
或者 (BaseClass)obj
转换后的对象调用 Show()
方法时,就会调用子类中的方法,而不会调用基类中的同名方法。
3. 总结
new
和 override
关键字都是用于继承中方法的重写,但是它们的实现方式略有不同。使用 new
关键字修饰的方法可以隐藏基类中的同名方法,使用 override
关键字修饰的方法则是完全重写基类中的同名方法。
所以,当需要重写基类中的方法,并且重新实现该方法时,应该使用 override
关键字;当需要在子类中隐藏基类中的同名方法时,应该使用 new
关键字。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# new和override的区别分析 - Python技术站