Měl bych několik připomínek. Za prvé, takto je Vám ta faktory metoda k ničemu, protože instanci Animal si nevytvoříte, abyste na ní poté mohl zavolat CreateFromString. Metoda samozřejmě musí být statická, ale řekl bych, že Vy to víte, jen jste to zapomněl napsat. Za druhé, vnořené typy se nehledají přes tečkovou notaci, ale přes +. Zkuste si Vaší aplikaci spustit a podívat se, co vypíše
Assembly.GetExecutingAssembly().GetTypes()
a uvidíte
...
{Name = "Animal" FullName = "Sample.Animal"}
{Name = "Giraffe" FullName = "Sample.Animal+Giraffe"}
{Name = "Tiger" FullName = "Sample.Animal+Tiger"}
...
A za třetí, vnořené typy se používají v případě, když cítíte, že Vaše třída je zodpovědná za moc věcí a chcete jí trochu odlehčit, ale pořád se jedná o logiku privátní té dané třídě. Například pokud interně tvoříte složitou hierarchii dat a nechcete mít něco jako List<List<List>>, pak si vyvtoříte interní pomocné typy, které se chovají jako kolekce. Možná jste jen zvolil špatný příklad, protože takto mi přijde přitažený za vlasy. Proč bych dělal konkrétní typy zvířat privátní a vnořené a jejich instance hledal pomocí reflexe? Tak jak je to napsané je jasné, že nové druhy zvířat budete přidávat Vy, protože pokud někdo jiný zdědí od Animal, stejně je mu ta factory metoda k ničemu. Takže třeba switch a nebo podle mě lepší statický Dictionary<string, Animal>. Netuším, jakou definici pro class clusters používáte, já jsem si na netu našel pěkně hodnocenou následující
You want to provide a Factory (Cluster) interface that, with minimal description, manufactures and returns a specific concrete instance of a Factory Object that satisfies the behavior of the cluster family described by the Factory (Cluster) interface.
i s příkladem, který mě na private nested typy rozhodně nevede. Zdroj: http://stackoverflow.com/q/1844158/80900...
|