Учитывая следующий код клиента:Может ли конструктор вернуть субкласс?
var obj = new Class1();
Есть ли способ изменить конструктор Class1 так, что оно будет на самом деле возвращает подкласс (или какой-либо другой альтернативный вариант осуществления) вместо?
Я хотел бы obj получить одну из двух различных реализаций, в зависимости от некоторого состояния. Очевидно, я мог бы перейти на использование фабрики или инфраструктуры DI, но я бы хотел, если это возможно, избегать изменения кода клиента.
Я предполагаю, что ответ отрицательный, но мне интересно, есть ли какой-то умный способ сделать это.
Мы рассматриваем возможность добавления функции «расширение new», которая по существу позволит вам создать статический заводский метод, который будет вызываться, когда используется «новый» оператор, так же, как методы расширения вызывают, когда «.» используется оператор. Это был бы хороший синтаксический сахар для завода. Если у вас действительно потрясающий сценарий, когда этот тип паттерна будет полезен, я бы хотел увидеть пример. –
@ Эрик: пока это не пример C#, я столкнулся с ситуацией, когда это было бы полезно в C++. Я разрабатываю кросс-платформенную библиотеку, и было бы очень полезно, чтобы ABC-платформа-агностик могла возвращать экземпляр производного класса для конкретной платформы из своего конструктора. Я уверен, что при разработке с C# должны возникать аналогичные ситуации. – Mac
@ Эрик Липперт - у меня для вас реальный сценарий! http://blog.hackensplat.com/2010/09/construct-something-else-c.html – billpg