无法理解隐藏在“幕后”的确切方法

时间:2018-03-10 12:48:56

标签: c# class oop methods method-hiding

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

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

提前谢谢你:)

1 个答案:

答案 0 :(得分:2)

有隐藏,有压倒一切。两者都是对立的。就个人而言,我一直忘记躲避思考“这不是压倒一切,最好不要混淆那些”。我不记得我使用它的一个案例。如果我无法覆盖,我只是封装而不是处理隐藏。所以它很可能是有人想到的事情之一,但从来没有完全采取过追踪。

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

隐藏不会更改实施。它只隐藏它。只要您不将其强制转换为更基本的类型,您就可以使隐藏实现隐藏基类类型。但是一旦你被抛弃,基类实现就会断言。反过来,没有“津贴”是必要的。