Должен ли класс c # генерировать экземпляры самого себя? - PullRequest
13 голосов
/ 02 ноября 2008

У меня есть класс, который определяет тип CallRate. Мне нужно добавить возможность создавать несколько экземпляров моего класса, читая данные из файла.

Я добавил статический метод в свой класс CallRate, который возвращает List<CallRate>. Можно ли классу генерировать новые экземпляры самого себя, вызывая один из своих собственных конструкторов? Это работает, мне просто интересно, правильно ли это делать.

List<CallRates> cr = CallRates.ProcessCallsFile(file);

Ответы [ 12 ]

1 голос
/ 02 ноября 2008

Это нормально. То, что вы только что создали, является чем-то вроде простого фабричного метода. У вас есть статический метод, который создает действительный экземпляр типа. На самом деле ваш метод даже не должен быть статичным, и у вас все еще есть действительный код. Существует шаблон проектирования (Prototype), который создает новый действительный объект из существующего объекта. Подробности смотрите на http://www.dofactory.com/Patterns/PatternPrototype.aspx.

0 голосов
/ 14 января 2009

Это вполне приемлемо. Когда я это делаю, я обычно делаю реальные конструкторы для класса закрытыми, чтобы было ясно, что способ создания экземпляров only - это статический метод.

Это очень полезно в тех случаях, когда "конструкция" не всегда может возвращать новый экземпляр. Например, вы можете вместо этого вернуть ранее кэшированный объект.

...