Часть II. Объектно-ориентированное программирование
Заметим, что методы с префиксом "On" — это так называемые
обра-
ботчики
событий
. Событиями в данном случае являются сами действия
по удалению, добавлению и т. п. Реализация этих методов предназначе-
на для переопределения производным классом с целью выполнения не-
которых операций перед или в момент (зависит от сути метода) осуще-
ствления того или иного действия. Методы "On" вызываются только для
экземпляра, возвращенного свойством
List
, но не для экземпляра, воз-
вращенного свойством
InnerList
.
Примеры работы с методами класса
CollectionBase
приведены в при-
ложении, текст которого представлен в листинге 12.3, а результат — на
рис. 12.3. Все пояснения — по тексту программы.
Листинг 12.3
/* Created by SharpDevelop.
* User: user
* Date: 11.12.2012
* Time: 14:30
*
* To change this template use Tools | Options | Coding |
* Edit Standard Headers. */
using System;
using System.Collections;
namespace app44_collections_CollectionBase_class
{
public class Int16Collection : CollectionBase
{
public Int16 this[ int index ] // Объявление
// индексатора
// (пояснение см. ниже)
{ get { return((Int16) List[index]); }
set { List[index] = value; }
}
// Метод, определенный в классе.
// Методы, определенные в классе, названы так же,
// как методы из наследуемого класса, работу
// которых проверяют
public int Add(Int16 value)
{ return(List.Add(value)); }
Глава 12. Коллекции. Обобщения
237
public int IndexOf(Int16 value)
{ return(List.IndexOf(value)); }
public void Insert(int index, Int16 value)
{ List.Insert(index, value); }
public void Remove(Int16 value)
{ List.Remove(value); }
public bool Contains(Int16 value)
{ // Если value не типа Int16, метод возвращает false
return(List.Contains(value));
}
// Примеры задания обработчиков событий (идет
// переопределение методов абстрактного класса)
protected override void OnInsert(int index,
Object value)
{ /* Сюда вставляются операторы, которые станут
выполняться только тогда, когда пойдет вставка
значения values */
}
protected override void OnRemove(int index,
Object value)
{ /* Сюда вставляются операторы, которые станут
выполняться только тогда, когда пойдет удаление
значения values */
}
protected override void OnSet(int index,
Object oldValue, Object newValue)
{ /* Сюда вставляются операторы, которые станут
выполняться только тогда, когда пойдет установка
значения values */
}
/* Здесь проверяется значение value на принадлежность
его к типу Int16.
Если тип не Int16, генерируется исключение
с выдачей соответствующего сообщения */
238
Do'stlaringiz bilan baham: |