neděle 6. dubna 2008

Programování - Indexery v C#

  • nejedná se o základní vlastnost objektově orientovaného programování
  • jde o syntaktickou vymoženost jazyka pro pohodlnější práci s objektem
  • můžeme k našemu objektu přistupovat jako k poli
    • daný "index" může být i vícerozměrový a není omezen jen na typ int
   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Text;
   4:  using System.Text.RegularExpressions;
   5:   
   6:  namespace TeorieIndexery
   7:  {
   8:      class ObjektSIndexerem
   9:      {
  10:          private int[] desetcisel;
  11:          private string testovaciRetezec;
  12:   
  13:          public ObjektSIndexerem()
  14:          {
  15:              desetcisel = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  16:              testovaciRetezec = "testovaci retezec s cislem 7890";
  17:          }
  18:   
  19:          // indexer vypada podobne jako vlastnost (ma setter a getter)
  20:          // ale misto nazvu pouzivame klicove slovo 'this'
  21:          // kteremu predchazi typ navratove hodnoty
  22:          // a nasleduje typ indexu
  23:          public int this[int index]
  24:          {
  25:              get { return desetcisel[index]; }
  26:              set { desetcisel[index] = value; }
  27:          }
  28:   
  29:          // ukazka jineho indexeru
  30:          // pouze pro cteni, hleda v nasem retezci pomoci 
  31:          // regularniho vyrazu a vrati nalezeny retezec
  32:          // tohle neni typicke pouziti indexeru!!
  33:          // davam to sem pro ukazku ze jde indexer pouzit i jinak
  34:          public string this[Regex regex]
  35:          {
  36:              get { return regex.Match(testovaciRetezec).Value; }
  37:          }
  38:      }
  39:   
  40:      class Program
  41:      {
  42:          static void Main(string[] args)
  43:          {
  44:              ObjektSIndexerem obj = new ObjektSIndexerem();
  45:   
  46:              Console.WriteLine(obj[5]); // vrati 5
  47:   
  48:              obj[5] = 7;
  49:              Console.WriteLine(obj[5]); 
  50:              // vrati 7, protoze jsme dane cislo zmenili
  51:   
  52:              Console.WriteLine(obj[new Regex(@"[0-9]+")]); 
  53:              // vrati '7890'
  54:   
  55:              Console.ReadLine();
  56:          }
  57:      }
  58:  }

Žádné komentáře: