C# přehled vlastností
Hello World using System; class Hello { static void Main() { Console.WriteLine("Hello world"); }
Namespaces Deklarace typů Členy Organizace C# Struktura programu Obsahuje typy a další namespaces Deklarace typů Třídy, struktury, rozhraní, enumerace, a delegáty Členy Konstanty, datové členy (složky), metody, vlastnosti, indexery, události, atributy, operátory, konstruktory, destruktory Organizace Žádné hlavičkové soubory Assemblies
Hodnotové typy Referenční typy Typy Obsahuje přímo data Nemůže být null Referenční typy Obsahuje odkazy na objekty Může být null int i = 123; string s = "Hello world"; i 123 s "Hello world"
Type System Hodnotové typy Referenční typy Primitivní int i; Enumerace enum State { Off, On } Struktury struct Point { int x, y; } Referenční typy Třídy class Foo: Bar, IFoo {...} Interfaces interface IFoo: IBar {...} Pole string[] a = new string[10]; Delegáty delegate void Empty();
Vícenásobná dědičnost pomocí implementace rozhraní Třída - členy Třídy Jednoduchá dědičnost Vícenásobná dědičnost pomocí implementace rozhraní Třída - členy Konstanty, složky (pole), metody, vlastnosti, indexery, události, operátory, konstruktory, destruktory Statické a instanční členy Vnořené, zapečetěné, abstraktní třídy Přístupnost pomocí modifikátorů public, protected, internal, protected internal, private
Programové bloky obsahující sekvenci příkazů Redukuje duplikátní kód Třída - Metody Programové bloky obsahující sekvenci příkazů Redukuje duplikátní kód Dekompozice problému Základní charakteristika Úroveň přístupu Návratová hodnota Jméno Parametry Tělo (sekvence příkazů)
Parametry metod Modifikátor Žádný – předávání hodnotou – metoda obdrží kopii původních dat ref – předávání odkazem out – výstupní parametry params – proměnlivý počet parametrů téhož typu
Vlastnosti jsou “chytré složky” public class Button: Control { private string caption; public string Caption { get { return caption; } set { caption = value; Repaint(); Button b = new Button(); b.Caption = "OK"; String s = b.Caption;
Indexery jsou “malé pole” Dají se přetěžovat public class ListBox: Control { private string[] items; public string this[int index] { get { return items[index]; } set { items[index] = value; Repaint(); ListBox listBox = new ListBox(); listBox[0] = "hello"; Console.WriteLine(listBox[0]);
Konstruktory a destruktory Konstruktor je metoda, která se volá když dojde k vytvoření instance třídy (struktury) Implicitní (bezparametrický) konstruktor Parametrické konstruktory Destruktor se volá když instance končí své trvání Destruktory jsou volány automaticky Pouze jeden destruktor pro danou třídu Destruktor volá metodu Finalize
Odlišnosti proti třídám Struktury Odlišnosti proti třídám Hodnotový typ, zásobník místo haldy Žádné reference Žádná dědičnost Ideální pro „odlehčené“ objekty Body, obdélníky, barvy Výhody Nejsou alokovány na haldě Efektivnější využití paměti
Třídy a struktury - porovnání class CPoint { int x, y; ... } struct SPoint { int x, y; ... } CPoint cp = new CPoint(10, 20); SPoint sp = new SPoint(10, 20); 10 sp 20 cp CPoint 10 20
Rozhraní (Interfaces) Podporují vícenásobnou dědičnost Může obsahovat metody, vlastnosti, indexery, události Public interface IUIControl { void Paint(); } public class Button : IUIControl public void Paint { /* vybarvi tlacitko */ }
Mohou obsahovat hodnoty jiného typu Enumerace (Výčty) Mapují se na Systém.Int32 Mohou obsahovat hodnoty jiného typu Byte, short, int, long enum Color: byte { Red = 1, Green = 2, Blue = 4, Black = 0 }
Delegáty Objektově orientované ukazatele na funkce Typově bezpečný objekt, který ukazuje na jiné metody Základ pro události
Příkazy a výrazy Cykly Příkazy - větvení Ostatní while, do while, for, foreach Příkazy - větvení if – else, switch - default Ostatní break, continue, return, throw
Referenční typ odvozený od typu Systém.Array Pole Referenční typ odvozený od typu Systém.Array Průchod polem příkazy - foreach, for, … Pole Jednorozměrné pravoúhlé multidimenzionální pole nepravidelné multidimenzionální pole