Základy jazyka C# doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah přednášky Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní Základy jazyka C# 2 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 1
Architektura.NET Programovací jazyky VB C# C++ JScript Common Language Specification (CLS) ASP.NET Windows Forms ADO.NET XML Common Language Runtime (CLR) Windows Služby COM+ Zdroj: J. Šeda: J2EE,.NET a vývoj rozsáhlých systémů, www.interval.cz Základy jazyka C# 3 Součásti.NET Framework COM+ distribuované objekty CLR společné knihovny ADO.NET přístup k datům ASP.NET webové aplikace Windows Forms uživatelské rozhraní CLS společné vlastnosti jazyků Programovací jazyky - C#, zásadní změny Základy jazyka C# 4 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 2
Historie 1998 první zprávy o novém jazyce COOL červen 2000 uvolnění specifikace C# červenec 2000.NET Framework SDK listopad 2000 zahájení standardizace 13. 12. 2001 ECMA-334 (C#), 335 (CLI) leden 2002 finální podoba.net Autor: Anders Hejlsberg (Turbo Pascal, Delphi), Scott Wiltamuth, Peter Golde Základy jazyka C# 5 Vlastnosti jazyka C# Podpora vývoje založeného na komponentách přímá podpora základních konstrukcí (vlastnosti, metody, události) metadata + atributy integrované verzování komponent integrovaná XML dokumentace Základy jazyka C# 6 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 3
Vlastnosti jazyka C# Moderní objektově orientovaný jazyk veškeré očekávané vlastnosti delegát bezpečné předávání funkcí jako parametrů přetěžování operátorů, uživatelské konverze, obyčejná pole rozsáhlý systém knihoven tříd jednotný typový systém, ale není všechno objekt optimalizace Základy jazyka C# 7 Vlastnosti jazyka C# Vývoj robustních a trvanlivých aplikací typová bezpečnost automatická správa paměti jednotný systém výjimek možnost nezávislého verzování bázových tříd kontroly rozsahů polí, aritmetické kontroly Základy jazyka C# 8 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 4
Vlastnosti jazyka C# Pragmatický přístup žádná revoluce v syntaxi jazyka práce s ukazateli, přetypování, přímé přidělování paměti na zásobníku nutnost speciálních privilegií spolupráce s existujícími komponentami COM, DLL Základy jazyka C# 9 Příklad using System; namespace Priklady { /// <summary> /// popis třídy Priklad1 /// </summary> class Priklad1 { static void Main(string[] args) { Console.WriteLine( ); Základy jazyka C# 10 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 5
Datové typy Hodnotové typy obsahují přímo data - přiřazením vzniká kopie hodnoty sbyte, byte 10, 3u, 0x00ff short, ushort, int, uint, long, ulong 1000L char a, \x0041, \n float, double, decimal 1.5f, 1e-3m, 6.67e-23d bool true, false Základy jazyka C# 11 Datové typy Struktura (struct) Hodnotový typ Jako třída, ale bez dědičnosti struct Komplex { public float real; public float imag; Základy jazyka C# 12 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 6
Datové typy Výčtový typ množina pojmenovaných konstant enum DnyTydne { Pondeli, Utery, Streda, ; enum Dny : byte { ; Dny dnes = Dny.Nedele; Základy jazyka C# 13 Datové typy Referenční typy neuchovávají hodnotu, ale odkaz na hodnotu - objekt hodnota null přiřazením nevzniká kopie hodnoty, ale jen odkazu Typy object, string, třída (class), rozhraní (interface), pole a delegát (delegate) Ukazatele Základy jazyka C# 14 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 7
Datové typy Pravidelná pole Klasická pole jako v C/C++ Stejný počet prvků ve všech řádcích int [,] mat1 = new int[5, 10] mat1[2,3] = 15; Nepravidelná pole Pole polí jako v Javě int[][] mat2 = new int [5][]; mat2[2] = new int[7]; mat[2][3] = 15; Základy jazyka C# 15 Výrazy Jako C/C++/Java Přetěžování operátorů Operátory lze definovat pomocí uživatelských metod Unární, binární a relační operátory Mat operator + (Mat op2) { Základy jazyka C# 16 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 8
Příkazy jako C/C++/Java Příkaz switch nelze přecházet mezi větvemi Příkaz goto Průchod kolekcí nebo polem příkaz foreach foreach( T x in IEnumerable ) { IEnumerator ie = coll.getenumerator(); while( ie.movenext() ) { T x = (T)ie.Current(); Základy jazyka C# 17 Prostory jmen namespace cz.vsb.cs.priklady { using System.Collections; System.Collections.Hashtable t; Hashtable t; Základy jazyka C# 18 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 9
Třídy public class Control { string text; // data public string Text { // vlastnost get { return text; put { text = value; Redraw(); public void Clear() { Text = ; // metoda Základy jazyka C# 19 Konstruktor a destruktor Stejné jméno jako třída Konstruktor se volá automaticky Destruktor se volá při zrušení objektu kdy to je? class Bod { private int x, y; public Bod(short nx, short ny) { x = nx; y = ny; public Bod() { x = y = 0; Základy jazyka C# 20 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 10
Rozhraní a dědičnost public interface IDelete { void Delete(); public class TextBox : Control, IDelete { public void Delete() { public override string Text { get { set { přetížená vlastnost Základy jazyka C# 21 Indexery public class ScoreList { int[] scores = new int[5]; public int this[int index] { // indexer get { return scores[index]; set { if( value >= 0 && value <= 10 ) scores[index] = value; public int Average { // read-only vlastnost get { int sum = 0; foreach( int score in scores ) sum += score; return sum / scores.length; Základy jazyka C# 22 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 11
Literatura a další zdroje Drayton, P., Albahari, B., Neward, T.: C# in a Nutshell. O Reilly & Associates Inc., 2002, ISBN 0-596-00181-9 Kačmář, D.: Programujeme.NET aplikace ve Visual Studiu.NET Computer Press, 2001, ISBN 80-7226-569-5 http://msdn.microsoft.com/net http://www.gotdotnet.com http://www.go-mono.com http://www.dotgnu.org http://www.ecma.ch Základy jazyka C# 23 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 12