将自身作为构造函数

时间:2016-03-16 19:58:43

标签: c# design-patterns

我见过类似的问题,但大多数时候它没有相同的含义或细微差别

public class Dog {
  public Dog(Animal animal) {
    this.name = animal.name;
    this.age = animal.age;
    ....
  }
  public Dog(Dog dog) {
    this.name = dog.name;
    this.age = dog.name;
  }
}

我在不同的情况下曾经多次看过同事写的这个但是在第二个构造函数中还没有看到任何价值......我想知道为什么这种结构模式好/坏/否则有任何原因

1 个答案:

答案 0 :(得分:2)

这称为copy constructor

这个想法是,如果在消费代码中需要对象,对象应该知道如何克隆自己 - 即,仅仅提供对现有对象的引用是不可取的。

就个人而言,我从未觉得自己需要一个,而且我觉得他们可能被其他开发人员滥用或滥用,其中非平凡的内存占用量与类本身的大小呈线性增长。

在可能使用此模式的许多情况下,创建和使用实现一个或多个公共接口的只读包装类可能是理想的替代。