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

Когда же применение индексаторов наиболее оправданно? Начну с уже приведенного примера окна со списком. С концептуальной точки зрения, такое окно представляет собой просто список, или массив строк, подлежащих выводу. В следующем примере я объявил класс с именем 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. Лично я выбрал бы генерацию исключений в тех случаях, когда переданное значение индекса не может быть использовано. Но это дело вкуса — ваша обработка ошибок может отличаться. Важно дать знать клиенту о возникновении ошибки, когда передается неверный индекс.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: