TOC

This article has been localized into Czech by the community.

Datové typy:

Anonymní typy

Doposud jsme se naučili, že objekty pocházejí z třídy. Třída je deklarována s určitým počtem polí, vlastností a/nebo metod, a pak můžete vytvořit instanci této třídy jako objekt. Nicméně s příchodem anonymních typů již nemusíte deklarovat třídu před vytvořením objektu. Nebojte se, třídy vůbec neumírají, protože anonymní typy (nebo objekty) přicházejí s několika omezeními, ale pro některé situace jsou opravdu skvělé!

Anonymní typ je inicializován použitím operátoru new ve spojení s inicializátorem objektu - v tomto ohledu je to velmi podobné vytváření instance třídy, pouze vynecháte název třídy. Také, protože za objektem nestojí žádná třída, musíte při získávání odkazu na váš objekt použít klíčové slovo var. To může znít složitě, ale následující příklad by vám měl ukázat, že to vůbec není složité:

var user = new    
{    
Name = "John Doe",    
Age = 42  
};
Console.WriteLine(user.Name + " - " + user.Age + " years old");

To je vše - nyní máme objekt s informacemi (jméno a věk) o uživateli. Anonymní typy jsou skvělé pro mnoho situací, zvláště když potřebujete rychle vrátit něco s větší složitostí než jen řetězec nebo číslo. Anonymní typy vám umožňují vymýšlet vlastnosti na počkání, aniž byste se museli starat o deklarování třídy nejprve a poté měnit tuto třídu, když se vaše potřeby změní. Ale jak bylo zmíněno, existuje několik omezení, o kterých musíte vědět, když uvažujete o použití anonymního typu místo definování třídy:

  • Na rozdíl od skutečné třídy nemůže mít anonymní typ pole ani metody - pouze vlastnosti.
  • Jakmile je objekt inicializován, nemůžete k němu přidávat nové vlastnosti.
  • Vlastnosti jsou pouze pro čtení - jakmile je objekt inicializován, nemůžete měnit jejich hodnoty.

I přes to vše jsou anonymní typy stále extrémně praktické pro mnoho úkolů. Běžný scénář použití je, když máte složitý objekt (z definované třídy) a potřebujete jej zjednodušit, například protože musíte objekt udržet co nejmenší, aby bylo možné jej odeslat do prohlížeče, nebo možná protože celý objekt obsahuje citlivé informace, které nechcete vystavit spotřebiteli. Anonymní typy jsou pro to skvělé, jak je ilustrováno v následujícím příkladu:

using System;
using System.IO;

namespace AnonymousTypes
{
    class Program
    {
static void Main(string[] args)
{
    string pathOfExe = System.Reflection.Assembly.GetEntryAssembly().Location;
    FileInfo fileInfo = new FileInfo(pathOfExe);
    var simpleFileInfo = new
    {
Filename = fileInfo.Name,
FileSize = fileInfo.Length
    };
    Console.WriteLine("File name: " + simpleFileInfo.Filename + ". Size: " + simpleFileInfo.FileSize + " bytes");
}
    }
}

První řádek nám jednoduše získá název aktuálně spuštěného souboru, tedy naší vlastní aplikace. Používáme ho k vytvoření instance třídy FileInfo, která pak bude obsahovat spoustu informací o tomto konkrétním souboru. Nechceme všechny tyto informace, takže vytvoříme zjednodušenou verzi s anonymním typem, použijeme informace z původní instance FileInfo. V posledním řádku použijeme tyto informace pro základní výstup.

Pravděpodobně jste si všimli, že každé vlastnosti definované v našem anonymním typu dáváme název (Filename a FileSize) - to dává dobrý smysl, protože k nim chceme později přistupovat. Nicméně když založíme náš objekt na informacích z existujícího objektu, můžeme ve skutečnosti vynechat vlastní název a nechat kompilátor použít název vlastnosti, kterou mu přiřazujeme, jako zde:

var simpleFileInfo = new
{
    fileInfo.Name,
    fileInfo.Length
};

Nyní máme dvě vlastnosti nazvané Name a Length místo Filename a FileSize. Pěkně pohodlné, pokud vám na názvech nezáleží, nebo možná pravděpodobněji: Pokud dáváte přednost přesně stejným názvům jako u původního objektu.

Shrnutí

Anonymní typy umožňují rychle vytvářet instance objektu s jednou nebo více vlastnostmi. Tyto vlastnosti jsou pouze pro čtení a později nelze přidávat další vlastnosti.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!