Cvičení – volání metod třídy .NET
- 12 min
Bez ohledu na to, jestli jste si to uvědomili, volali jste metody jazyka C# od první aplikace "Hello, World!". Tato aplikace používá WriteLine() metodu Console třídy k zobrazení zprávy "Hello, World!".
Ne všechny třídy a metody se však implementují stejným způsobem. Tato lekce popisuje některé z nejběžnějších variant, které budete muset pochopit při použití metod z knihovny tříd .NET. Ještě důležitější je, že se dozvíte, jak najít a používat dokumentaci, která vám pomůže lépe porozumět jednotlivým metodám.
Jak volat metody v knihovně tříd .NET
Z předchozích zkušeností s metodou Console.WriteLine() byste už měli znát základy:
- Začněte zadáním názvu třídy. V tomto případě je
Consolenázev třídy . - Přidejte operátor pro přístup k členu, a to symbol
.. - Přidejte název metody. V tomto případě je
WriteLinenázev metody . - Přidejte operátor vyvolání metody, což je sada závorek
(). - Nakonec zadejte argumenty, které jsou předány metodě, pokud existují, mezi závorky operátoru vyvolání metody. V tomto případě zadáte text, který má
Console.WriteLine()metoda zapisovat do konzoly (například"Hello World!").
V závislosti na tom, jak vývojáři danou metodu navrhli a implementovali, můžete také potřebovat:
- Předejte další hodnoty jako vstupní parametry.
- Přijměte návratovou hodnotu.
V další lekci prozkoumáte, jak předat vstupní hodnoty metodě a jak lze metodu použít k vrácení hodnoty do volající rutiny.
I když se některé metody dají volat stejným způsobem, jako jste volali Console.WriteLine(), existují i jiné metody v knihovně tříd .NET, které vyžadují jiný přístup.
Příprava programovacího prostředí
Tento modul zahrnuje programovací aktivity, které vás provedou procesem sestavování a spouštění vzorového kódu. Doporučujeme, abyste tyto aktivity dokončili pomocí editoru Visual Studio Code jako vývojového prostředí. Používání editoru Visual Studio Code pro tyto aktivity vám pomůže stát se pohodlnějším psaním a spouštěním kódu ve vývojářském prostředí, které používají profesionálové po celém světě.
Otevřete Visual Studio Code.
K otevření editoru Visual Studio Code můžete použít nabídku Start systému Windows (nebo odpovídající prostředek pro jiný operační systém).
V nabídce Soubor editoru Visual Studio Code vyberte Otevřít složku.
V dialogovém okně Otevřít složku přejděte do složky Windows Desktop.
Pokud máte jiné umístění složky, kde uchováváte projekty kódu, můžete místo toho použít toto umístění složky. Pro toto školení je důležité mít umístění, které je snadné najít a zapamatovat.
V dialogovém okně Otevřít složku vyberte Vybrat složku.
Pokud se zobrazí dialogové okno zabezpečení s dotazem, jestli autorům důvěřujete, vyberte Ano.
V nabídce Terminálu editoru Visual Studio Code vyberte Nový terminál.
Všimněte si, že příkazový řádek na panelu Terminálu zobrazuje cestu ke složce pro aktuální složku. Například:
C:\Users\someuser\Desktop>Poznámka:
Pokud pracujete na vlastním počítači místo v sandboxu nebo hostovaném prostředí a dokončili jste další moduly Microsoft Learn v této řadě C#, možná jste už vytvořili složku projektu pro ukázky kódu. V takovém případě můžete přeskočit další krok, který se používá k vytvoření konzolové aplikace ve složce TestProject.
Na příkazovém řádku terminálu vytvořte novou konzolovou aplikaci v zadané složce, zadejte následující řádek:
dotnet new console -o ./CsharpProjects/TestProjectTento příkaz rozhraní příkazového řádku .NET používá šablonu programu .NET k vytvoření nového projektu konzolové aplikace jazyka C# v zadaném umístění složky. Příkaz pro vás vytvoří složky CsharpProjects a TestProject a jako název souboru
.csprojpoužije TestProject.Pokud se zobrazí zpráva s oznámením, že soubory už existují, pokračujte dalším postupem. Znovu použijete existující soubory projektu.
V zobrazení PRŮZKUMNÍK rozbalte složku CsharpProjects .
Měla by se zobrazit složka TestProject a dva soubory, programový soubor jazyka C# s názvem Program.cs a soubor projektu C# s názvem TestProject.csproj.
V nabídce Soubor editoru Visual Studio Code vyberte Otevřít složku.
V dialogovém okně Otevřít složku vyberte složku CsharpProjects a pak vyberte Vybrat složku.
V zobrazení PRŮZKUMNÍK rozbalte složku TestProject a pak vyberte Program.cs.
Odstraňte existující řádky kódu.
Tento projekt konzoly C# použijete k vytváření, sestavování a spouštění ukázek kódu během tohoto modulu.
Zavřete panel Terminálu.
Volání různých druhů metod v knihovně tříd .NET
V editoru Visual Studio Code vytvořte vzorový kód, který implementuje metody
System.RandomaSystem.Consoletřídy, zadejte následující kód:Random dice = new Random(); int roll = dice.Next(1, 7); Console.WriteLine(roll);Tento kód simuluje hod kostky pomocí
Random.Next()metody pro vygenerování čísla a metoduConsole.WriteLine()pro zobrazení hodnoty.Poznámka:
Kód si podrobněji prohlédnete dále v této lekci.
V nabídce Soubor editoru Visual Studio Code klepněte na tlačítko Uložit.
Chcete-li v zobrazení PRŮZKUMNÍKa otevřít terminál v umístění složky TestProject, klepněte pravým tlačítkem myši na TestProject a pak vyberte Otevřít v integrovaném terminálu.
Všimněte si, že panel terminálu obsahuje příkazový řádek, který zobrazuje cestu ke složce. Například:
C:\Users\someuser\Desktop\CsharpProjects\TestProject>Pokud ke spouštění příkazů rozhraní příkazového řádku .NET CLI používáte terminál, příkazy se spouštějí z umístění zobrazené složky. Před sestavením nebo spuštěním kódu se ujistěte, že složka kódu odpovídá cestě ke složce zobrazené na příkazovém řádku.
Na příkazovém řádku terminálu pro spuštění vašeho kódu zadejte dotnet run a stiskněte Enter.
Všimněte si, že ve výstupu konzoly se zobrazí číslo od 1 do 6 (počet tečk na kostkách). Pokud kód spustíte dostatek času, zobrazí se všechna čísla 1–6.
Věnujte chvíli zkoumání syntaxe použité k přístupu k metodám
Next()aWriteLine().Všimněte si, že pro přístup k metodám používáte různé techniky.
Random dice = new Random(); int roll = dice.Next(1, 7); Console.WriteLine(roll);Na třetím řádku kódu zahrnete odkaz na
Consoletřídu a zavoláte metoduConsole.WriteLine()přímo. Pro voláníRandom.Next()metody však použijete jinou techniku. Důvodem, proč používáte dvě různé techniky, je to, že některé metody jsou "stavové" a jiné jsou "bezstavové". V další části prozkoumáte rozdíl mezi stavovými a bezstavovými metodami.
Stavové versus bezstavové metody
Vprojektechch Při postupném provádění jednotlivých řádků kódu se hodnoty ukládají do proměnných. V libovolném okamžiku provádění je aktuální stav aplikace tvořený kolekcí všech hodnot uložených v paměti.
Správné fungování některých metod se neopírá o aktuální stav aplikace. Jinými slovy, bezstavové metody jsou implementované tak, že mohou fungovat bez odkazování nebo změn jakýchkoli hodnot, které jsou už uložené v paměti. Bezstavové metody se označují také jako statické metody.
Například metoda Console.WriteLine() nespoléhá na žádné hodnoty uložené v paměti. Provede svoji funkci a ukončí se, aniž by to jakýmkoli způsobem ovlivnilo stav aplikace.
Správná funkce jiných metod však vyžaduje přístup ke stavu aplikace. Jinými slovy, stavové metody jsou vytvořeny takovým způsobem, že spoléhají na hodnoty uložené v paměti podle předchozích řádků kódu, které již byly provedeny. Nebo mění stav aplikace aktualizováním hodnot nebo ukládáním nových hodnot do paměti. Označují se také jako instanční metody.
Stavové (instanční) metody udržují přehled o svém stavu v polích, což jsou proměnné definované ve třídě. Každá nová instance třídy získá vlastní kopii těchto polí, do kterých se ukládá stav.
Jedna třída může podporovat jak stavové, tak bezstavové metody. Pokud však potřebujete volat stavové metody, musíte nejprve vytvořit instanci třídy, aby metoda měla přístup ke stavu.
Vytvoření instance třídy
Instance třídy je volána jako objekt. K vytvoření nové instance třídy se používá operátor new. Vezměte do úvahy následující řádek kódu, který vytvořením nové instance třídy Random vytvoří nový objekt s názvem dice:
Random dice = new Random();
Operátor new provádí několik důležitých věcí:
- Nejprve si vyžádá adresu v paměti počítače, která je dostatečně velká pro uložení nového objektu založeného na třídě
Random. - Vytvoří nový objekt a uloží ho na tuto adresu paměti.
- Vrátí adresu paměti, aby ji bylo možné uložit do objektu
dice.
Od tohoto okamžiku, když je dice objekt odkazován v kódu, probíhá na pozadí v modulu runtime .NET vyhledávání, které vytváří dojem, že pracujete přímo s objektem samotným.
Váš kód používá dice objekt jako proměnnou, která ukládá stav Random třídy. Když voláte metodu Next() objektu dice , metoda používá stav uložený v objektu dice k vygenerování náhodného čísla.
Nejnovější verze modulu runtime .NET umožňuje vytvořit instanci objektu bez nutnosti opakovat název typu (vyvolání konstruktoru typu cíle). Například následující kód vytvoří novou instanci Random třídy:
Random dice = new();
Záměrem je zjednodušit čitelnost kódu. Při psaní výrazu typu cíle new vždy použijete závorky.
Proč je metoda Next() stavová?
Možná vás zajímá, proč byla metoda Next() implementována jako stavová? Nemohli návrháři knihovny tříd .NET vymyslet způsob, jak vygenerovat náhodné číslo bez vyžadování stavu? A co přesně je metodou Next() ukládáno nebo odkazováno?
To jsou dobré otázky. Z obecného hlediska se počítače hodí k provádění konkrétních instrukcí, kterými se vytvoří spolehlivý a opakovaný výsledek. Aby vytvořili iluzi náhodnosti, rozhodli se vývojáři metody Next() zaznamenat datum a čas až na zlomek milisekundy a použít toto číslo jako počáteční hodnotu pro algoritmus, který pokaždé vygeneruje náhodné číslo. I když není zcela náhodné, pro většinu aplikací postačuje. Stav zachycený a udržovaný po celou dobu životnosti dice objektu je počáteční hodnota. Při každém následném volání metody Next() se algoritmus znovu spouští, ale výchozí semeno se změní, aby nemusila být vrácena stejná hodnota.
Pokud ale chcete použít metodu Random.Next() , nemusíte rozumět tomu, jak funguje. Důležité je vědět, že některé metody vyžadují, abyste před voláním vytvořili instanci třídy, zatímco jiné ne.
Jak můžete určit, jestli je potřeba vytvořit instanci třídy před voláním jejích metod?
Jedním z přístupů k určení, jestli je metoda stavová nebo bezstavová, je konzultovat dokumentaci. Dokumentace obsahuje příklady, které ukazují, zda metoda musí být volána z instance objektu nebo přímo z třídy.
Poznámka:
Možná se budete muset posunout dolů na stránce dokumentace, abyste našli příklady kódu.
Jako alternativu k vyhledávání v dokumentaci k produktu se můžete pokusit o přístup k metodě přímo ze samotné třídy. Pokud to funguje, víte, že se jedná o bezstavovou metodu. Přinejhorším se zobrazí chyba kompilace.
Zkuste se dostat přímo k metodě Random.Next() a podívejte se, co se stane.
Do editoru visual Studio Code zadejte následující řádek kódu:
int result = Random.Next();Už víte, že
Next()se jedná o stavovou metodu, ale tento příklad ukazuje, jak Editor editoru Visual Studio Code reaguje při nesprávném pokusu o přístup k metodě.Všimněte si, že se pod
Random.Nextzobrazí červená vlnovka, což označuje, že máte chybu kompilace.Pokud je metoda, kterou vás zajímá, bezstavová, nezobrazí se žádná červená vlnovka.
Umístěte kurzor myši nad červenou vlnovku.
Mělo by se zobrazit automaticky otevírané okno s následující zprávou:
(1,14): error CS0120: An object reference is required for the non-static field, method, or property 'Random.Next()'Jak jste viděli v kódu na začátku lekce, můžete tuto chybu opravit vytvořením instance
Randomtřídy před přístupem kNext()metodě. Například:Random dice = new Random(); int roll = dice.Next();V tomto případě
Next()se metoda volá bez vstupních parametrů.
Rekapitulace
- K volání metod některé třídy v knihovně tříd .NET se používá formát
ClassName.MethodName(), kde symbol.je přístupový operátor člena pro přístup k metodě definované v dané třídě, a symboly()jsou operátory vyvolání metody. - Při volání bezstavové metody nemusíte napřed vytvořit novou instanci její třídy.
- Při volání stavové metody musíte vytvořit instanci třídy a získat přístup k metodě v tomto objektu.
- K vytvoření nové instance třídy se používá operátor
new. - Instance třídy je volána jako objekt.