Indexatori

Sunt cazuri în care are sens să tratăm o clasă ca un array. Cei care au studiat C++ vor observa că este o generalizare a supraîncărcării operatorului [] din respectivul limbaj. Sintaxa:

[atribut][modificatorIndexator] declaratorDeIndexator
{
declaratiiDeAccesor
}

unde:

modificatorIndexator – poate fi new, public, protected, internal, private, virtual, sealed, override, abstract, extern.

declaratorDeIndexator – are forma:

tipReturnat this [listaParametrilorFormali]

unde:

listaParametrilorFormali – trebuie să conțină cel puțin un parametru, parametru care nu trebuie să fie de tipul ref sau out.

declaratiiDeAccesor – asemănătoare cu cele de la proprietăți, trebuie să conțină accesorul get sau accesorul set.

Indexatorii și proprietățile sunt asemănătoare în ceea ce privește utilizarea accesorilor get și set. Un indexator poate fi privit ca o proprietate cu mai multe valori. Pe când o proprietate poate fi declarată statică, acest lucru este interzis în cazul indexatorilor.

Când folosim un indexator, sintaxa este asemănătoare cu cea de la vectori. Totuși există deosebiri:

  • indexatorii pot folosi indici nenumerici, pe când un vector trebuie să aibă indicii de tip întreg
  • indexatorii pot fi supradefiniți, la fel ca metodele, pe când vectorii nu
  • indexatorii nu pot fi folosiți ca parametrii ref sau out, pe când vectorii da
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Exemplul_76
{
    class ClasaMea
    {
        private string[] data = new string[6];
        public string this[int index]
        {
            get
            {
                return data[index];
            }
            set
            {
                data[index] = value;
            }
        }
    }
    class Rezultat
    {
        public static void Main()
        {
            ClasaMea v = new ClasaMea();
            v[0= "Exemplu";
            v[1= "cu";
            v[2= "indexatori";
            Console.WriteLine("{0} {1} {2}.", v[0], v[1], v[2]);
            Console.ReadLine();
        }
    }
}

Rezultat

poo3

Leave a comment