【发布时间】:2016-09-09 02:24:31
【问题描述】:
一位同事向我介绍了通过允许派生类覆盖私有字段初始化来隐藏实现细节的概念。
例如我有一个基类:
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() {}
}
这允许我覆盖基类私有的派生类中的初始化:
public class Cookie : Animal
{
protected override void init()
{
//do whatever i want here
}
}
- 这种类型的实现细节隐藏有名称吗?
- 我会从 Animal 调用 Init(),还是因为从派生类调用,所以这种模式坚持使用 Init()?
我想达到什么目的?
我有一个类(上面示例中的动物),它有大约 20 个需要初始化的私有对象,并且我希望能够在进行单元测试时定义自己的初始化方式。
【问题讨论】:
-
您的第二个问题不清楚,能否请您重新措辞并解释您要达到的目标。
-
@SirajMansour 已更新以回答您的问题
-
嗯...我想我们称他们为
virtual methods? msdn.microsoft.com/en-us/library/aa645767(v=vs.71).aspx - 顺便说一下,你应该看看 SRP,他们把整个范式都放在了耳朵上。 -
当你有一个 SRP 类的类库并且你需要使用它们时,你最终会得到一个主类,你需要在其中实例化所有 SRP,这就是为什么我有 20 个
标签: c# .net visual-studio oop