1

我发现很难准确理解隐藏方法的作用。有人可以解释一下在使用方法隐藏时“幕后”发生了什么吗?

    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();

先感谢您 :)

4

1 回答 1

3

有隐藏,有压倒一切。两者都是相反的。就我个人而言,我一直忘记隐藏,除了想“这不是压倒一切,最好不要把它们混在一起”。我不记得我使用它的一个案例。如果我无法覆盖,我只是封装而不是处理隐藏。因此,这很可能是某人早早想到的那些事情之一,但从未完全被跟踪。

覆盖更改实现。它必须由基类(虚拟)明确允许。它必须由派生类显式完成。但反过来,即使类被强制转换为基类型,覆盖也会优先。示例:Object.ToString()。像 Console.WriteLine 这样的代码有只接受一堆对象的重载。但是由于您不能打印对象,所以它只调用它的 ToString() 方法。

隐藏不会改变实现。它只会隐藏它。只要您不将其转换为更基本的类型,您就会让隐藏实现隐藏基类。但是一旦你放弃,基类实现就会自我断言。反过来,没有“津贴”是必要的。

于 2018-03-10T12:57:15.177 回答