通过使用受保护的虚拟隐藏实现细节

时间:2016-05-13 03:18:59

标签: c# .net visual-studio oop

同事通过允许派生类覆盖私有字段初始化,向我介绍了隐藏实现细节的概念。

例如我有一个基类:

public class Animal
{
   private Dog dog;
   private Cat cat;
   private Mouse mouse;

   protected virtual void Init()
   {
      dog = new Dog();
      cat = new Cat();
      mouse = new Mouse();
   }

   public void DoStuff() {}

}

这允许我覆盖基类privates的派生类中的初始化:

public class Cookie : Animal
{
   protected override void init()
   {
      //do whatever i want here
   }
}
  1. 这种类型的实现细节隐藏是否有名称?
  2. 我是否会从Animal调用Init()或者这个模式是否因为从派生类调用而坚持Init()?
  3. 我想要实现的目标是什么?

    我有一个类(上例中的动物),它有大约20个需要初始化的私有对象,我希望能够在进行单元测试时定义我自己的初始化方法。

2 个答案:

答案 0 :(得分:2)

1)这只是压倒一切,我不知道它不止于此。但是你不能访问子类中的私有字段,它们也必须受到保护,以便你可以在你的子类中访问它们。

2)你的问题不明确,但我猜你是在问如何从覆盖中调用基类的方法。你需要做的就是

public class Cookie : Animal
{
   protected override void init()
   {
      //do whatever you want here
      base.init(); //This line will call the init() function in Animal. 
      //do whatever you want here
   }
}

答案 1 :(得分:1)

简称为override

  

覆盖方法提供了一个成员的新实现   继承自基类。

您可以调用base class'使用overriden methodInit() derived class base.Init();