Biorąc pod uwagę następujący kod klient:Czy konstruktor może zwrócić subklasę?
var obj = new Class1();
Czy jest jakiś sposób, aby zmodyfikować konstruktor Class1 tak, że będzie faktycznie powrotu podklasę (lub jakąś inną alternatywną implementację) zamiast?
Chciałbym obj, aby uzyskać jedną z dwóch różnych implementacji, w zależności od pewnych warunków. Oczywiście mogłem zmienić na fabryczną lub DI strukturę, ale chciałbym, o ile to możliwe, uniknąć zmiany kodu klienta.
Zakładam, że odpowiedź brzmi nie, ale zastanawiam się, czy jest jakiś sprytny sposób, aby tak się stało.
Rozważamy dodanie funkcji "rozszerzenie nowe", która zasadniczo umożliwiłaby stworzenie statycznej metody fabrycznej, która byłaby wywoływana, gdy używany jest operator "nowy", podobnie jak metody wywoływania są wywoływane, gdy "." operator jest używany. Byłby to ładny cukier syntaktyczny dla fabryki. Jeśli masz naprawdę niesamowity scenariusz, w którym ten rodzaj wzoru byłby przydatny, chciałbym zobaczyć przykład. –
@Eric: chociaż nie jest to konkretny przykład C#, natknąłem się na sytuację, w której byłoby to przydatne w C++. Zajmuję się tworzeniem biblioteki międzyplatformowej i byłoby naprawdę użyteczne, aby agnostyczna platforma ABC mogła zwracać instancję klasy pochodzącą od platformy z jej konstruktora. Jestem pewien, że muszą być podobne sytuacje, które można znaleźć podczas pracy z C#. – Mac
@Eric Lippert - Mam dla Ciebie scenariusz w prawdziwym świecie! http://blog.hackensplat.com/2010/09/construct-something-else-c.html – billpg