pátek 4. dubna 2008

Programování: Práce s řetězci v C#/.NET

tato otázka se nezabývá kódováním, můžeme ho proto při výkladu vynechat

  • standardně jsou všechny řetězce v .NET ukládány jako Unicode
  • základní datový typ pro řetězce v C# je System.String, většinou vytvářený pomocí klíčového slova string (s malým "s")
    • je vždy uložen na heapu (haldě; podobně jako jiné základní typy, např. int)
    • při manipulaci s řetězcem (např. při přidání jednoho znaku) je vždy nutné vytvořit nový řetězec a starý smazat => není proto vhodný pro časté změny
    • s řetězcem můžeme pracovat s přetíženými operátory (=,+=,+)
    • String má zabudovaný indexer, který vrací daný znak na pozici i (jako char): mujretezec[i]
    • důležité metody:
      • Compare() a CompareOriginal() porovnávají řetězce (první zmíněná podle místního a jazykového nastavení), použití přes statickou třídu String nebo přes přetížený operátor (==,!=)
      • IndexOf() pro hledání podřetězce, vrací pozici prvního znaku z prvního nelezeného podřetězce
      • Replace() sloužící pro nahrazování znaků a podřetězců
      • Remove() pro odstranění zadaného počtu znaků od zadané pozice
      • Split() sloužící k rozdělení řetězců podle zvoleného oddělovače (např. ";")
      • Substring() extrahující podřetězec od zadané pozice
      • ToCharArray() která vrátí pole charů
    • vlastnost Length (readonly), která vrací počet znaků v řetězci
  • pro rychlejší manipulaci s řetězcem se požívá třída StringBuilder
    • při vytváření instance objektu můžeme specifikovat, kolik znaků v paměti chceme pro řetězec rezervovat, můžeme tím předejít zbytečnému kopírování, pokud by se změněný řetězec nevešel do rezervovaného bloku paměti
    • třída má podobné metody jako String, pro skládání řetězců se však používá metoda Append()
    • další důležitou metodou je ToString(), který vrátí daný řetězec přetypovaný na System.String
  • jednou z možností reprezentace řetězce je použití charového pole
  • pro pokročilou práci s řetězci, zejména pro hledání, se používají regulární výrazy
    • potřebné třídy najdeme ve jmenném prostoru System.Text.RegularExpressions
    • základní třídy: Regex, Match

Kreslení řetezců v GDI+

  • základní metoda pro kreslení řetězců třídy Graphics je DrawString()
    • spousta přetížení
    • základní DrawString("řetězec", Font, Brushes.Black, x, y)
    • Font je vlastnost formuláře, můžeme si však naistancovat vlastní písmo:
      • new Font(FontFamily.GenericSansSerif, Font.Size)
    • Brush je abstraktní typ, pokud si chci naistancovat vlastní štětec, musím použít nějaký zdědený typ, např. SolidBrush
    • volitelně lze přidat ještě parametr StringFormat, kterým můžeme dále specifikovat formátování řetězce
      • např. chceme zobrazit text vertikálně:
      • new StringFormat(StringFormatFlags.DirectionVertical | tady lze přidat další flagy)
    • standardní systémový font má velikost 13!
  • řádkování se dá řešit několika způsoby
    • pomocí změření velikosti jednoho řádku metodou Graphics.MeasureString()
    • lepší varianta je však použití Font.GetHeight(Graphics)
      • výhodou je, že nám bude řádkování fungovat i při používání různých transformací

Žádné komentáře: