Как узнать, когда вызывать базовый метод или переопределять методы в наблюдаемой коллекции - PullRequest
2 голосов
/ 03 сентября 2010

У меня есть несколько вопросов при просмотре этого учебника.

Интересно, когда я перезаписываю методы, как узнать, нужно ли мне вызывать базовый метод?

public CustomerCollection(IEnumerable<Customer> customers, OMSEntities context) : base(customers)

также зачем мне нужно

protected override void InsertItem(int index, Customer cust)
{
    this.context.AddToCustomers(cust);
    base.InsertItem(index, cust);
}

protected override void RemoveItem(int index)
{
    this.context.DeleteObject(this[index]);
    base.RemoveItem(index);
}

что делают 2 строки в каждом методе? и почему нужен такой подобный метод. если я перезаписываю методы для удаления и добавления, почему бы не обновить тоже?

Ответы [ 2 ]

4 голосов
/ 03 сентября 2010

Вы вызываете базовый метод, когда он является просто дополнительной функциональностью, украшающей то, что делает базовый метод, вы не вызываете базовый метод, когда заменяете его функциональность оптом.

И если вы не знаете, что делает базовый метод, вы не будете его переопределять, поэтому, зная, что он делает, и почему вы переопределяете его, вы сможете принять это решение в соответствии.

0 голосов
/ 03 сентября 2010

Для первой части вашего вопроса, если вы не добавите :base(parameter) в конец конструктора, он на самом деле поставит :base() для вас за кулисами.если нет base(), вы получите исключение при компиляции.вам нужна цепочка конструкторов вплоть до object().добавив, что :base(parameter) это просто способ выбрать другой конструктор, отличный от конструктора по умолчанию.

Для второй части.Хорошее практическое правило: если вы переопределяете метод для предоставления некоторой дополнительной функциональности, вам следует вместо этого также вызывать базовый метод (чтобы вы получили его функциональность), если вы пытаетесь заменить функциональность вместо добавления к нейвам не нужно называть базу (как вы ее заменяете :)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...