Есть ли хороший шаблон для раскрытия общей коллекции только для чтения?

Итак, у меня есть эти классы, которые предоставляют коллекцию дочерних объектов.

Я не хочу, чтобы другие классы добавляли или удаляли объекты из коллекций, потому что мне нужно подключаться к событиям в дочерних объектах, поэтому по мере их добавления или удаления я хочу иметь возможность выполнять дополнительную обработку. Но мне очень нравится простота внутреннего управления дженериками.

Я упоминал, что это приложение WPF, поэтому мне нужно INotifySupport?

Лучшее, что я могу придумать, - это что-то вроде этого.

public class foo : INotifyPropertyChanged
{
    protected List<ChildFoo> _Children = new List<ChildFoo>();

    public foo()
    {
    }

    public void AddChild(ChildFoo newChild)
    {
        DoAttachLogic(newChild);
        _Children.Add(newChild);
        NotifyPropertyChange("Children");
    }

    public void RemoveChild(ChildFoo oldChild)
    {
        DoRemoveLogic(oldChild);
        _Children.Remove(oldChild);
        NotifyPropertyChange("Children");
    }

    public ChildFoo[] Children
    {
        get
        {
            return _Children.ToArray();
        }
    }

}

Есть ли серьезные недостатки с этот дизайн, который я не вижу?

Каждый раз, когда осуществляется доступ к свойству Children, мы получаем накладные расходы на преобразование списка в массив.

Любой совет по этому поводу был бы отличным.

6
задан oluies 8 October 2010 в 21:21
поделиться