Принципы объектно-ориентированного программирования

         

Пример индексатора



Пример индексатора

Когда же применение индексаторов наиболее оправданно? Начну с уже приведенного примера окна со списком. С концептуальной точки зрения, такое окно представляет собой просто список, или массив строк, подлежащих выводу. В следующем примере я объявил класс с именем MyListBox, содержащий индексатор для установки и получения строк через объект ArrayList (класс Array List является классом .NET Framework, который используется для хранения совокупности объектов).

using System;



using System.Collections;

class MyListBox {

protected ArrayList data = new ArrayListQ;

public object this[int idx] {

get {

if (idx > -1 && idx < data.Count) {

return (data[idxj); }

else {

// Здесь возможно возникновение исключения, return null; } }

set {

if (idx > -1 && idx < data.Count) {

datafidx] = value; >

else if (idx == data.Count) {

data.Add(value);

}

else

{

// Здесь возможно возникновение исключения.

} > } }

class IndexerslApp

{

public static void Main()

{

MyListBox Ibx = new MyListBoxQ;

lbx[0] = "foo";

lbx[1] = "bar";

lbx[2] = "baz";

Console.WriteLine("{0} {1} {2}",

lbx[0], lbx[1], lbx[2]);

} >

В этом примере я реализовал проверку на ошибки, возникающие при выходе индекса за границы. Формально это не связано с индексаторами, поскольку индексаторы связаны лишь со способом использования объекта как массива клиентом класса, и никак — с внутренним представлением данных. Однако при изучении функций нового языка это помогает понять не только их синтаксис, но и принципы практического использования. Итак, в обоих методах индексатора (получателе и установщике) я проверял передаваемое значение индекса с помощью данных, хранимых членом класса ArrayList. Лично я выбрал бы генерацию исключений в тех случаях, когда переданное значение индекса не может быть использовано. Но это дело вкуса — ваша обработка ошибок может отличаться. Важно дать знать клиенту о возникновении ошибки, когда передается неверный индекс.



Содержание раздела