Public třída uvnitř public třídy by být neměla a rozhodně byste neměl vnořené třídy používat zvenčí (pokud jsou privátní, je to v pořádku, to se občas používá). Principiálně na vnořování tříd není nic špatného, i když je to neobvyklé. Ve třídě A máte třídy B, C, a D, když třídu A2 podědíte a chcete mít uvnitř třídy B2, C2 a D2, tak B2 poděďte z B, C2 z C a D2 z D. Do třídy A udělejte virtuální metody, které budou vracet instance tříd B, C, D, a v A2 tyto metody přepište, aby vracely B2, C2 a D2 (ikdyž jejich návratový typ bude B, C a D). Třídám B, C a D a jejich potomkům dejte Protected konstruktor a nevytvářejte jejich instance natvrdo - vždy přes ty "factory" metody. Jediný průšvih je, že v poděděné třídě A2 budete muset přetypovávat B na B2 (dá se vyřešit pomocí shadowingu, ale to není moc elegantní a nedoporučoval bych to). Anebo pro to nějak znásilnit generiku, ale obávám se, že to moc nepůjde. Jaký konkrétní problém řešíte? Nedalo by se to přeci jen udělat bez vnořování tříd?
|