我发现很难理解完全隐藏的方法。 有人可以解释一下使用方法隐藏时“幕后”会发生什么吗?
class Base
{
public virtual void OverrideMethod()
{
Console.WriteLine("Base.OverrideMethod");
}
public virtual void HideMethod()
{
Console.WriteLine("Base.HideMethod");
}
}
class Derived:Base
{
public override void OverrideMethod()
{
Console.WriteLine("Derived.OverrideMethod");
}
public new void HideMethod()
{
Console.WriteLine("Derived.HideMethod");
}
}
(1)这到底是做什么的?
Base x=new Derived();
(2)这些确实是做什么的?
x.OverrideMethod();
x.HideMethod();
提前谢谢你:)
答案 0 :(得分:2)
有隐藏,有压倒一切。两者都是对立的。就个人而言,我一直忘记躲避思考“这不是压倒一切,最好不要混淆那些”。我不记得我使用它的一个案例。如果我无法覆盖,我只是封装而不是处理隐藏。所以它很可能是有人想到的事情之一,但从来没有完全采取过追踪。
覆盖会更改实施。它必须由基类(虚拟)明确允许。它必须由派生类明确地完成。但反过来,即使将类强制转换为基类型,覆盖也优先。示例:Object.ToString()。像Console.WriteLine这样的代码具有只接受一堆对象的重载。但是因为你不能打印对象,所以它会调用它的ToString()方法。
隐藏不会更改实施。它只隐藏它。只要您不将其强制转换为更基本的类型,您就可以使隐藏实现隐藏基类类型。但是一旦你被抛弃,基类实现就会断言。反过来,没有“津贴”是必要的。