1. Vytvořte si třídu (třeba ChildrenCollection), která bude dědit z Collection(Of Parent) a overridněte jí metody InsertItem (tam nastavíte nově přidané položkce Parent, pokud už ho bude mít, tak asi vyhoďte výjimku InvalidOperationException, aby náhodou objekt nebyl ve dvou kolekcích najednou) a RemoveItem(tam jí ho odnastavíte). Chce to vyzkoušet, jestli je potřeba zavolat i ClearItems, nebo jestli zavolá na každou RemoveItem, to nevím a nechce se mi to hledat v dokumentaci. UpdateItem zakažte, vyhoďte třeba NotSupportedException. Pokud má kolekce dělat tohle, není nutné dovolovat aby někdo mohl na 3. položku přiřadit jiný objekt než tam právě je. 2. Té kolekci dejte v konstruktoru instanci parenta, který ji obsahuje, ať ví, co má vnitřním položkám přiřazovat. Do vlastnosti Children vytvořte novou kolekci v konstruktoru parenta. 3. Jo a jinak tahle hierarchie se typicky řeší pomocí jedné třídy, která má kolekci Children a vlastnost Parent, pokud je to kořen, tak má Parent nastaveno na null. Líp se s tím pracuje a je to odolnější vůči chybě, kdy se někdo pokusí jako kořen udělat třídu Child. Takhle bude kořen automaticky jakýkoliv objekt, který nezařadíte do kolekce. A abyste nemusel kontrolovat, jestli Parent je null, tak si klidně udělejte Boolean readonly vlastnost IsRoot, je to výstižnější.
|