C# áttekintés
Bevezető Objektum-orientált nyelv Az újdonságok kerülnek bemutatásra A hasonló dolgok csak említés szintjén Pl. namespace, class A lényeges újdonságok részletes Pl. property C# áttekintés
„Hasonlóságok” Namespace, using Class, struct, interface, enum A C++-hoz képest van különbség köztük! „Többszörös öröklődés” nem támogatott class child : base { … } Metódusok, attribútumok, … Utasítások if-else, switch, for, while, … Automatikus memória felszabadítás C# áttekintés
Hasonló, de … Program belépési pontja Konzolra írás, konzolról olvasás static void Main(string[] args) Konzolra írás, konzolról olvasás Console.Write(“x = {0}”, x); Console.WriteLine(…) x = Console.Read(); Formátum példa "FormatString {0} {1} \n {2} …", arg1, arg2, arg3 region C# áttekintés
Típusok C# áttekintés
Típusok System.Int32 – int System.Boolean – bool … Ugyanazok, az int vagy a bool kulcsszó csak alias az System.Int32 vagy System.Boolean-ra C# áttekintés
Típusok Nullable Nullable<T> vagy T? jelelölés, ahol T típus HasValue és GetValue metódusok C# ?? operátor C# áttekintés
const vs readonly Const – compile-time konstans Readonly – runtime konstansok definiálásra is alkalmas Pl.: public static readonly uint timeStamp = (uint)DateTime.Now.Ticks; Ez a kódrészlet public const … esetén fordítási hibát eredményezne const esetén a member csak a deklaráció helyén kaphat értéket, ameddig a readonly esetében a konstruktorban is C# áttekintés
Láthatóságok private protected internal protected internal public Csak a típuson belül protected Csak az típuson és a leszármazottjain belül internal Csak az adott assembly-n belül protected internal Protected VAGY Internal public Korlátlan hozzáférés C# áttekintés
Tulajdonságok (properties) get, set kulcsszavak Getter és setter metódusok generálódnak a háttérben Auto-generated Csak olvasható, írható/olvasható tulajdonságok Alkalmazhatók a meglévő láthatóságok C# áttekintés
Paraméterek, paraméter átadás Opcionális paraméterek A paraméterlista végén Sintaxis [Optional] attribútum VAGY Típus változónév = defaultÉrék Függvényhívás Az opcionális argumentumok elhagyhatók a hívásnál Named arguments paraméterNév: paraméterérték, … C# áttekintés
Paraméterek, paraméter átadás Ref kulcsszó Out kulcszó Érték típusok referenciaként adhatóak át metódusoknak C# áttekintés
Kollekciók IEnumerable és IEnumerable<T> Az összes kollekción, ami implementálja ezt az interfészt, végig lehet iterálni Gyakran használt ilyen kollekciók List<T> Egyszerű indexelhető lista Dictionary<TKey, TValue> Szótár „kulcs, érték” párok tárolására ObservableCollection<T> CollectionChanged esemény hívódik meg minden kollekción történt változásról (hozzáadás, törlés … ) C# áttekintés
Kollekciók Érdemes a generikus kollekciókat használni a típusbiztonság miatt Léteznek szálbiztos kollekciók is a System.Collections.Concurrent névtérben C# áttekintés
Initializers struct Cat { int Age; string Name; } Object initializer Cat cat = new Cat { Age = 10, Name = "Fluffy" }; Collection initializer A kollekciónak implementálnia kell az IEnumerable interfészt List<Cat> cats = new List<Cat> { new Cat(){Name="S", Age=8 }, new Cat(){Name="A", Age=14 } }; C# áttekintés
A partial kulcsszó Lehetővé teszi egy osztály, struktúra, interfész vagy metódus több fájlba történő szétdarabolását. FONTOS: az összetartozó partial elemeknek egy assembly-ben kell lenniük. Tipikus felhasználás: UI és code-behind Lásd; a következő órán C# áttekintés
A sealed kulcssszó Osztályon alkalmazva megakadályozza, hogy az adott osztályból származtatni lehessen. sealed class SealedClass { public int x; public int y; } Megemlítés: metódusokra is használható C# áttekintés
Delegate „Erősen típusos függvény pointer” A System.MulticastDelegate és System.Delegate osztályok leszármazottjai Csak a fordító származtathat belőlük Eseménykezelők is delegate-ek Függvény pointer C-ben double log2(double x) { return log(x) / log(2); } typedef double (*fgvtip)(double); fgvtip fgv = log2; double res = (*fgv)(17); C# áttekintés
Speciális delegate-ek Action Meghatározott paraméterlistával ellátott és visszatérési érték nélküli Action a = „példányosítás”; Action<int> a = „ példányosítás”; Func Meghatározott visszatérési értékkel és paraméterlistával ellátott Func<int, bool> f = „ példányosítás”; C# áttekintés
Speciális delegate-ek Predicate bool visszatérési értékkel és egyetlen paraméterrel Predicate<int> p = „példányosítás” EventHandler<TEventArgs> delegate void EventHandler<TEventArgs> C# áttekintés
Események Küldő/fogadó osztály, objektum Feliratkozás (+=), leiratkozás (-=) operátorokkal 1 eseményre több feliratkozó lehet, illetve egy feliratkozó feliratkozhat több eseményre is Pl.: gombnyomás esemény a UI-on C# áttekintés
Események class A { public event EventHandler AnEvent; } A a = new A(); a.AnEvent += „eseménykezelő” a.AnEvent -= „eseménykezelő” C# áttekintés
Using utasítás IDisposable interfész Determinisztikus erőforrás felszabadítás GC nem tudja felszabadítani a nem menedzselt erőforrásokat (DB kapcsolat, fájl handle) A using biztosítja, hogy az Dispose() metódus megfelelően legyen meghívva a példányosított objektumon még akkor is, ha kivétel dobódik egy try-finally generálódik a háttérben C# áttekintés
Bővítő metódusok (extension methods) Típus kiterjesztése a típus módosítása nélkül Speciális statikus metódus egy statikus osztályban A metódus paraméter listája elején a this kulcsszó határozza meg a kiterjesztett típust Névtér explicit importálása szükséges (using direktíva) C# áttekintés
Lambda kifejezések Lokálisan létrehozható függvény Argumentumként átadhatók vagy visszaadhatóak egy metódus által Előnye: hozzáfér a lokális objektumokhoz Tipikus felhasználás LINQ-ben Paraméter lista: (x, y …) Lambda operátor: => Függvénytörzs: { … } Pl.: (x, y) => { return x + y; } C# áttekintés
LINQ Language Integrated Queries Function vagy query szintaxis Extension Method + Lambda kifejezés Function vagy query szintaxis LINQ interfész + LINQ provider-ek LINQ2SQL: SQL lekérdezések (Entity Fw) LINQ2Objects: objektumgráfok feldolgozása LINQ2XML: XML feldolgozása C# áttekintés
Feladat, házi feladat BookShopConsole Implementáljuk a Customer funkcionalitásokat elejétől a végéig Entitás kiegészítése CustomerRepository implementálása Kontroller kiegészítése Demóadatok betöltése indításkor Kontroller felügyeli hogy egyedi felhasználó nevek legyenek Customer listázás, lekérés név alapján, hozzáadás C# áttekintés