Algoritmy a programování III

Týden 2

C# je objektově orientovaný programovací jazyk orientovaný na komponenty. Jazyk C# poskytuje jazykové konstrukce pro přímou podporu těchto konceptů, díky kterým je jazyk C# přirozeným jazykem pro vytváření a používání softwarových komponent. Od svého původu přidává jazyk C# funkce pro podporu nových úloh a nově vznikajících postupů návrhu softwaru. V jádru je jazyk C# objektově orientovaný . Definujete typy a jejich chování.

Několik funkcí jazyka C# pomáhá vytvářet robustní a odolné aplikace. Uvolňování paměti automaticky uvolňuje paměť zabíranou nedostupnými nepoužívanými objekty. Typy s možnou hodnotou null chrání před proměnnými, které odkazují na přidělené objekty. Zpracování výjimek poskytuje strukturovaný a rozšiřitelný přístup k detekci a obnovení chyb. Výrazy lambda podporují techniky funkčního programování. Syntaxe LINQ (Language Integrated Query) vytváří společný vzor pro práci s daty z libovolného zdroje. Jazyková podpora asynchronních operací poskytuje syntaxi pro vytváření distribuovaných systémů. Jazyk C# má jednotný systém typů. Všechny typy jazyka C#, včetně primitivních typů, jako int jsou doublea , dědí z jednoho kořenového object typu. Všechny typy sdílejí sadu běžných operací. Hodnoty libovolného typu lze ukládat, převozovat a pracovat s hodnotami konzistentním způsobem. Jazyk C# navíc podporuje jak typy odkazů definované uživatelem , tak typy hodnot. Jazyk C# umožňuje dynamické přidělování objektů a v řádku úložiště zjednodušených struktur. Jazyk C# podporuje obecné metody a typy, které poskytují vyšší bezpečnost typů a výkon. Jazyk C# poskytuje iterátory, které implementátorům tříd kolekcí umožňují definovat vlastní chování pro klientský kód.

Jazyk C# klade důraz na verzi , aby se programy a knihovny v průběhu času vyvíjely kompatibilním způsobem. Aspekty návrhu jazyka C#virtualoverride, které byly přímo ovlivněny aspekty verzí, zahrnují samostatné modifikátory a , pravidla pro řešení přetížení metody a podporu explicitních deklarací členů rozhraní.

Architektura .NET

Programy v jazyce C# běží na .NET, virtuálním systému spouštění s názvem Common Language Runtime (CLR) a sadě knihoven tříd. CLR je implementace společné jazykové infrastruktury (CLI), která je mezinárodní standard od Microsoftu. Rozhraní příkazového řádku je základem pro vytváření prostředí pro spouštění a vývoj, ve kterých jazyky a knihovny bezproblémově spolupracují.

Zdrojový kód napsaný v jazyce C# je zkompilován do přechodného jazyka (IL), který odpovídá specifikaci rozhraní příkazového řádku. Kód a prostředky jazyka IL, jako jsou rastrové obrázky a řetězce, jsou uloženy v sestavení, obvykle s příponou .dll. Sestavení obsahuje manifest, který poskytuje informace o typech, verzi a jazykové verzi sestavení.

Při spuštění programu jazyka C# je sestavení načteno do modulu CLR. Modul CLR provádí kompilaci JIT (Just-In-Time), aby převádí kód IL na nativní instrukce počítače. Modul CLR poskytuje další služby související s automatickým uvolňováním paměti, zpracováním výjimek a s právy pro správu prostředků. Kód, který je spuštěn clr, se někdy označuje jako "spravovaný kód". "Nespravovaný kód" je zkompilován do nativního strojového jazyka, který cílí na konkrétní platformu.

Interoperabilita jazyků je klíčovou funkcí rozhraní .NET. Kód IL vytvořený kompilátorem jazyka C# odpovídá specifikaci CTS (Common Type Specification). Kód IL vygenerovaný z jazyka C# může pracovat s kódem, který byl vygenerován z verzí .NET jazyka F#, Visual Basic, C++. Existuje více než 20 dalších jazyků kompatibilních se standardem CTS. Jedno sestavení může obsahovat více modulů napsaných v různých jazycích .NET. Typy mohou odkazovat na sebe navzájem, jako by byly napsány ve stejném jazyce.

Kromě služeb za běhu obsahuje .NET také rozsáhlé knihovny. Tyto knihovny podporují mnoho různých úloh. Jsou uspořádané do oborů názvů, které poskytují širokou škálu užitečných funkcí. Knihovny zahrnují vše od vstupu souboru a výstupu až po manipulaci s řetězci po analýzu XML až po architektury webových aplikací až Windows Forms. Typická aplikace jazyka C# ve velké části využívá knihovnu tříd .NET ke zpracování běžných "instalačně".

Další informace o rozhraní .NET najdete v tématu Přehled rozhraní .NET.

Hello World

Program "Hello, World" se tradičně používá k zavedení programovacího jazyka. Tady je v jazyce C#:

C#

using System;class Hello
{
    static void Main()
    {
        Console.WriteLine("Hello, World");
    }
}

Program "Hello, World" začíná direktivou using , která odkazuje na obor System názvů . Obory názvů poskytují hierarchický způsob uspořádání programů a knihoven jazyka C#. Obory názvů obsahují typy a další obory názvů – System například obor názvů obsahuje řadu typů, Console například třídu odkazovanou v programu a řadu dalších oborů názvů, například IOCollectionsa . Direktiva using , která odkazuje na daný obor názvů, umožňuje nekvalifikované použití typů, které jsou členy daného oboru názvů. Kvůli direktivě using může program použít jako Console.WriteLine zkratku pro System.Console.WriteLine.

Třída Hello deklarovaná programem "Hello, World" má jeden člen, metodu s názvem Main. Metoda Main je deklarována pomocí static modifikátoru . Zatímco metody instance mohou odkazovat na konkrétní ohraničující instanci objektu thispomocí klíčového slova , statické metody pracují bez odkazu na konkrétní objekt. Podle konvence slouží statická metoda s Main názvem jako vstupní bod programu v jazyce C#.

Výstup programu je vytvořen metodou WriteLine třídy Console v oboru System názvů . Tato třída je poskytována standardními knihovnami tříd, na které ve výchozím nastavení kompilátor automaticky odkazuje.

Typy a proměnné

Typ definuje strukturu a chování všech dat v jazyce C#. Deklarace typu může obsahovat jeho členy, základní typ, rozhraní, která implementuje, a operace povolené pro tento typ. Proměnná je popisek, který odkazuje na instanci konkrétního typu.

V jazyce C# existují dva typy typů: typy hodnot a odkazové typy. Proměnné hodnotových typů přímo obsahují svá data. Proměnné odkazových typů ukládají odkazy na jejich data, druhá se označuje jako objekty. U odkazových typů je možné, aby dvě proměnné odkazovala na stejný objekt a aby operace s jednou proměnnou ovlivnily objekt, na který odkazuje druhá proměnná. U hodnotových typů mají proměnné svou vlastní kopii dat a není možné, aby operace na jedné ovlivnily ty druhé ( refout s výjimkou proměnných parametrů a ).

Identifikátor je název proměnné. Identifikátor je posloupnost znaků Unicode bez prázdných znaků. Identifikátorem může být vyhrazené slovo jazyka C#, pokud má předponu @. Použití vyhrazeného slova jako identifikátoru může být užitečné při interakci s jinými jazyky.

Typy hodnot jazyka C# jsou dále rozděleny na jednoduché typy, typy výčtu , typystruktur, typy hodnot s možnou hodnotou null a typy hodnot řazené kolekce členů. Odkazové typy jazyka C# jsou dále rozděleny na typy tříd, typy rozhranítypy polí a typy delegátů.

Následující osnova poskytuje přehled systému typů jazyka C#.