【发布时间】:2015-05-29 11:50:15
【问题描述】:
正如MSDN article中所引用的:
派生类的类型对象无法访问从基类继承的重新定义的新方法,并且从ShowDetails()继承的方法DescribeCar()中对派生类对象的调用DescribeCar()对@987654324进行@基类的方法。
如果DescribeCar()方法对ConvertibleCar类也可用,怎么就看不到所谓的new ShowDetails()方法呢?
class Car
{
public void DescribeCar()
{
System.Console.WriteLine("Four wheels and an engine.");
ShowDetails();
}
public virtual void ShowDetails()
{
System.Console.WriteLine("Standard transportation.");
}
}
// Define the derived classes.
// Class ConvertibleCar uses the new modifier to acknowledge that ShowDetails
// hides the base class method.
class ConvertibleCar : Car
{
public new void ShowDetails()
{
System.Console.WriteLine("A roof that opens up.");
}
}
class Program
{
static void Main(string[] args)
{
ConvertibleCar car2 = new ConvertibleCar();
car2.DescribeCar();
}
}
//output
// Four wheels and an engine.
// Standard transportation.
【问题讨论】:
-
真的不清楚你在问什么。
Car.DescribeCar只“知道”Car.ShowDetails... 这可能在ConvertibleCar中被覆盖,但这不是代码的作用。相反,它声明了一个新方法... -
因为你说它是
new,即它不是override,而是隐藏了其他实现。 -
new 和 override 的区别在于,定义为 new 的方法在对象被视为超类时不会被调用,而 override 会。
-
我要问的是关于 ConvertibleCar.DescribeCar()
-
DescribeCar 在 Car 中定义,无法“看到”您的“新”方法。坦率地说,你几乎不想在方法上使用 new 关键字。
标签: c# inheritance methods method-hiding