Войти



Поиск

Реклама

Полезное:

Новые статьи

Опечатка?

Выделите текст и нажмите Shift+Enter.
И мы в ближайшее время ее исправим!

Счетчики


Перехват процесса конструирования

В качестве следующего шага давайте перехватим процесс добавления к коллекции новых объектов Customer, когда он инициируется механизмом привязки данных. Когда вы добавляете новую строку к DataGridView или вызываете AddNew для BindingSource, вызывается метод AddNew из реализации интерфейса IBindingList вашего класса коллекции. Реализация AddNew по умолчанию в базовом классе BindingList<T> создает новый экземпляр вашего объектного типа, используя его конструктор по умолчанию, помещает его в коллекцию и передает ссылку на новый объект обратно вызывающему.

Можно взять в свои руки процесс конструирования и выполнить любую специальную инициализацию. Это может потребоваться, если объекты, которые будут отправлены в коллекцию, не имеют конструктора по умолчанию. Например, вы хотите инициализировать Customerld объекта значением, на единицу большим, чем текущий наибольший Customerld в коллекции.

Объявляет конструктор по умолчанию и параметризованный конструктор, которые делегируют вызов конструкторам базового класса. Это делается для того, чтобы вы могли инициализировать экземпляр класса CustomerCollection существующим List<Customer>, моделируя то, что уже умеет делать базовый класс.

Определяет метод AddNewCore, который выполняет следующее:

- Конструирует экземпляр объекта Customer.

- Вызывает вспомогательный метод для определения максимального значения Customerld путем итерации по коллекции.

ных). Кроме того, вы хотите установить в CustomerName подсказку «<Enter Customer Name>». Для этого вам нужно будет переопределить метод AddNewCore базового класса.

В классе BindingList<T> методы и свойства IBindingList делаются невиртуальными, а его реализация этих элементов вызывает виртуальные элементы, которые вы можете переопределить в своем производном классе. Эти виртуальные элементы по соглашению имеют имена, соответствующие именам элементов базового класса, с добавлением Core, например, AddNewCore, ApplySortCore и IsSortedCore.

Вот реализация AddNewCore для класса CustomerCollection:

- Использует значение, возвращаемое вспомогательным методом, для установки Customerld нового объекта значением на единицу большим, чем это максимальное значение.

- Устанавливает в качестве значения CustomerName подсказку "<Enter Customer Name>".

- Добавляет объект заказчика в коллекцию.

- Возвращает новый объект Customer как объектную ссылку, которая будет передана обратно вызывающему метода AddNew базового класса.

Определяет вспомогательный метод FindMaxld, вызываемый AddNewCore.




Newer news items:
Older news items:

 
Главная Страница Контактная Информация Поиск по сайту Контактная Информация Поиск по сайту