Programozás s 2. C# nyelven

Hasonló dokumentumok
C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

C# osztályok. Krizsán Zoltán

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven

Bánsághi Anna

A C# PROGRAMOZÁSI NYELV

Informatika terméktervezőknek

Java II. I A Java programozási nyelv alapelemei

VB C++ C# JScript J# Common Language Specification. ADO.NET and XML. Base Class Library. Common Language Runtime. Operating System

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Szoftvertechnológia alapjai Java előadások

Bánsághi Anna

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

A C# programozási nyelv alapjai

Készítette: Nagy Tibor István

C#, OOP. Osztályok tervezése C#-ban

C# versus Java. Óbudai Egyetem, Java Standard Edition Mérnök Informatikus szak, BSc Labor 3. Bedők Dávid v0.4

OOP #14 (referencia-elv)

Java II. I A Java programozási nyelv alapelemei

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

II. Programozási technológiák

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Eseményvezérelt alkalmazások fejlesztése II. A.NET keretrendszer és a C# programozási nyelv. Objektumorientált programozási nyelvek A Smalltalk nyelv

Programozás II. labor

3. Gyakorlat Ismerkedés a Java nyelvvel

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

Programozás 2., I. kötet Az objektumorientált paradigma alapjai

JAVA PROGRAMOZÁS 2.ELŐADÁS

Programozási nyelvek Java

C# gyorstalpaló. Készítette: Major Péter

és az instanceof operátor

Programozás s 2. Alapok

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Programozás s 2. C++ nyelven

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

Szoftvertervezés és -fejlesztés I.

Magas szintű programozási nyelvek 2 Előadás jegyzet

Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Programozási nyelvek Java

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás 2. előadás

Osztályok. 4. gyakorlat

Programozás I. Első ZH segédlet

Objektumorientált programozás C# nyelven

C-Sharp nyelv alapjai 1.

Programozás II. 4. Dr. Iványi Péter

Objektumorientált programozás C# nyelven

Programozás C és C++ -ban

BME MOGI Gépészeti informatika 8.


INFORMATIKAI ALAPISMERETEK

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

OOP: Java 8.Gy: Abstract osztályok, interfészek

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Programozási nyelvek II.: JAVA

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

INFORMATIKAI ALAPISMERETEK

BME MOGI Gépészeti informatika 4.

Web-technológia PHP-vel

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

Szoftvertervezés és -fejlesztés I.

Objektumorientált programozás C# nyelven

Programozás II. 2. Dr. Iványi Péter

Objektumorientált programozás C# nyelven III.

Java és web programozás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 7. előadás

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

117. AA Megoldó Alfréd AA 117.

Programozási nyelvek JAVA EA+GY 1. gyakolat

Szoftvertechnolo gia gyakorlat

Objektumorientált programozás C# nyelven

Programozás 1. Dr. Iványi Péter

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Programozási nyelvek II.: JAVA

A.NET Framework és programozása C# nyelven. Kedd I104

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

JAVA PROGRAMOZÁS 3.ELŐADÁS

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Információs Technológia

Programozás módszertan

Felhasználó által definiált adattípus

Programozás C++ -ban 2007/4

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

Java programozási nyelv 5. rész Osztályok III.

OOP és UML Áttekintés

Objektumorientált Programozás VI.

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

Bevezetés a programozásba Előadás: A const

Átírás:

Programozás s 2 Objektum Orientált Programozás C# nyelven utolsó változtatás s 2008.05.02.

.NET C# - Microsoft találm lmánya a.net platform számára. A C++ 'továbbfejleszt bbfejlesztése' se'.net hálózaton elosztott programok együttm ttműködése Előnyei: Nyelv független, f fordítás s közös k s közbensk zbenső nyelvre (Common( Intermediate Language), amit futás s közben k fordít t le a rendszer gépi g kódra k (Just( In Time compiler) potenciális egyszerűsítés: s: kódok k csoportjai csak egy-egy helyen vannak különböző típusú (Windows-os) os) eszközök k ugyanazzal a kóddal k támogathatt mogathatóakak Microsoft (és( s mások) m könnyebben k szabályozhatj lyozhatják k ki mikor mit futtathat Nyílt szabványokon (is) alapul: XML (Extensible( Markup Language ) és s SOAP (eredetileg 'Simple' Object Access Protocol' ') Hátrányai: Erőforr forrás s igénye a Common Language Runtime miatt nagy Windows specifikus (van linux-os open source próbálkoz lkozás s MONO, DotGNU ), de ezek nem teljesek (.NET 1.1 APIs teljes, 2.0 96%, 3 és s 3.5 -alfa) Egyes függvf ggvények a Base Class Library-ben ben Microsoft szabadalommal védettekv Már r most több, t mint 6000 függvf ggvénye van

Az első C# program Egy elso.cs nevű fájlba írjuk be a következk vetkezőket: ket: using System; // class Koszones // ki és s bevitelhez a namespace // minden vmilyen osztályban van // ide nem kéne k public, mert a Main()-t t nem hívhatjuk h meg // a static azt jelenti, hogy objektum létrehozl trehozás s nélkn lkül l is használhat lható args) // itt kezdődik dik a futás public static void Main(string[] args // args[0] az első paraméter, nem a program neve // kiiratás 0 az első behelyettesítend tendő paraméter Console.WriteLine("Szia 0!", args[0]); // itt az args Console.ReadLine(); // csak, hogy az ablak ne csukódj djon n be a Visual Studioból l futtatva. // itt az args[0]

C# alap típusokt Boolean csak true,, vagy false lehet. Egészek: sbyte 8-128 128 byte 8 0 256 short 16-32768 to 32767 ushort 16 0...65535 int 32-2147483648 to 2147483647 uint 32 0 4294967295 long 64-9223372036854775808 to 9223372036854775807 ulong 64 0 to 18446744073709551615 char 16 0..65535

C# alap típusokt valós s számok név stringek escape sorozatok: \' \" \\ \0 (nem \v hossz értékes jegyek tartomány float 32 7 1.5 x 10-45 to 3.4 x 10 38 double 64 15 5.0 x 10-324 to 1.7 x 10 308 decimal 128 28-29 29 1.0 x 10-28 to 7.9 x 10 28 nem azonos a null értékkel) \a \b \f \n \r \t

C# típusokt Minden típus t a System.Object osztályb lyból l van leszármaztatva, ezért vannak metódusai Pl. int a = 3; string s = a.tostring(); Tömbök k (péld ldák) int[] myints = 5, 10, 15 ; // integer tömb myints[2] = 9; ekvivalens deklaráci ció és s definíci ció: int[] myints = new int[] 5, 10, 15 ; string[] mystrings = new string[3]; assert(string[0]) == null) bool[][] mybools = new bool[2][]; //bool tömbt mböket tartalmazó tömb ('jagged' array) mybools[0] = new bool[2]; // az egyes tömbt mbök k dimenziója mybools[1] = new bool[1]; // különbk nbözhet double[,] mydoubles = new double[2, 2]; // két k t indexű tömb mydoubles[0,2] = 3.16; Felsorolási si típusok t (enum)

Feltételes teles és s ciklus utasítások sok Ami a C++ -ban is megvan, különbsk nbségekkel: 1. switch() argumentuma lehet enum, egész és string 2. Van foreach ciklus. pl: string[] gyumolcs = "Alma Alma", "Körte rte", "Szilva" Szilva"; foreach (string a in gyumolcs) Console.WriteLine("0 ", a);

Kategória elsődleges unáris operátorok C# operátorok (x) x.y f(x) a[x] x++ x new typeof sizeof checked unchecked + -! ~ ++x --x (T)x asszociativitás balra balra szorzás, s, stb * / % balra összeadás + - balra eltolás << >> balra reláci ciós < > <= >= balra egyenlőség ==!= jobbra logikai ÉS & balra logikai VAGY balra kizáró VAGY ^ balra feltételes teles ÉS && balra feltételes teles VAGY balra feltétel tel?... : jobbra értékadás = *= /= %= += -= <<= >>= &= ^= = jobbra

Nem static metódusok (függv ggvények) using System; class EgyModszeresOsztaly public static void Main() // static: nem kell objektumot létrehozni l hozzá (mint a C++-ban) string valasztas; EgyModszeresOsztaly om = new EgyModszeresOsztaly(); do valasztas = om.valaszt Valaszt();... while ( valasztas!= 'Q' && valasztas!= 'q'); string Valaszt() // nem static: objektum kell hozzá.. ezért van a new a Main-ben // nem public: kívülrk lről l nem érhető el string valasztas; valasztas = Console.ReadLine(); return valasztas;

Osztályok Class Minden elem (objektum, változv ltozó,, konstans, függvf ggvény, stb) valamilyen osztályban van A hozzáférési jogokat minden elemhez meg kell adni. Ezek lehetnek: public protected internal protected internal private bárki hozzáférhet csak a class és s leszármaztatottjai férhetnek f hozzá csak ebből a gyűjtem jteményből l (azaz az együtt fordított fájlokból ún. assembly-ből) l) hozzáférhet rhető,, de itt mindenki számára (azaz itt olyan, mintha public lenne) ebben az assembly-ben ben public, más m s assemblyk-ben ben protected csak maga az osztály férhet f hozzá az osztály elemei lehetnek static-ok. Ezek használatához nem kell objektumot létrehozni.

Osztályok 2 constructor public, private, static nincs paramétere, nem hívhath vható explicit módon m (new-val) destructor nincs paramétere, nem hívhath vható meg, nem lehet public, stb konstans elemek definíci ció szerint static-ek, de nem szabad a static kulcsszk lcsszót t eléjük írni: Pl.: public const int A=175; public const int B = A + 6; A static elemek is megváltoztathat ltoztathatóak ak de ez letiltható: public static readonly int piros; A readonly elemek értékét t csak deklaráci cióban, illetve constructorban lehet megadni:

Osztályok 3. class Color internal ushort redpart; internal ushort bluepart; internal ushort greenpart; public Color(ushort red, ushort blue, ushort green) redpart = red; bluepart = blue; greenpart = green; public static readonly Color Red = new Color(0xFF, 0, 0); public static readonly Color Blue = new Color(0, 0xFF, 0); public static readonly Color Green = new Color(0, 0, 0xFF); public static readonly Color White = new Color(0xFF, 0xFF, 0xFF);

Függvényparaméterek Érték k (value) paraméterek int F(int i) return 2 * i; -> int k = F(12); int j = F(k); ref paraméterek referencia int F( ref int i) return 2 * i; -> int i =4; int k = F(i); // i == 8 out paraméterek csak output a belső paraméter értékét t adja át az out paraméterben class C; int F( out C c) C cc; c = cc; return 1; params paraméterek változó hosszúságú int F(params int [] Param1) foreach(int P in Param1) return v; Túlterhelés: A függvf ggvények argumentumainak száma, típusa, t módosm dosítói i különbk nböznek. Pl.

Túlterhelés - Overloading using System; class Test static void F() Console.WriteLine("F()"); ()"); static void F(object o) Console.WriteLine("F(object)"); static void F(int value) Console.WriteLine("F(int)"); static void F(ref int value) Console.WriteLine("F(ref int)"); static void F(int a, int b) Console.WriteLine("F(int, int)"); static void F(int[] values) Console.WriteLine("F(int[])"); static void Main() F(); F(1); int i = 10; F(ref i); F((object)1); F(1, 2); F(new int[] 1, 2, 3);

Property-k úgy használhat lható mintha változó lenne, de valójában függvf ggvényhívás: public class Gomb private string szoveg; public string Szoveg get return szoveg; ; // olvasás: s: amikor a Szöveg egy értékadás s jobb oldalán n szerepel set caption = value; Repaint(); // írás: ha a Szöveg egy értékadás bal oldal // value az értékadás s jobb oldaláról l származ rmazó érték k neve a set -en belül // a compiler ezt a nevet várjav void UjraRajzol() s bal oldalán n szerepel Gomb b = new Gomb(); b.szoveg = "Kilépés"; // ez egyúttal újra is rajzolja a szöveget a gombra

Indexer-ek ek valamely osztály úgy kezelhető,, mintha tömb t lenne.. ráadr adásul nem is csak int argumentummal: class AsszociativIntTomb private int [] _arr; pubkic AsszociativIntTomb(int int size) _arr = new int[size size]; int this[string s] // ez az indexer nincs saját t neve, csak a this használhat lható // ugyanúgy túlterhelhett lterhelhető,, mint bármely b más m s függvf ggvény get int i = int.parse(s); // a string-ből l integer-t t csinál return _arr[i]; set int i = int.parse(s); _arr[i] = value; Használata: AsszociativIntTomb tomb = new AsszociativIntTomb(3); tomb["1"] = 123;

Események Pl. egy gombnyomás: public delegate void EsemenyKezelo(object sender, System.EventArgs e); // a delegate egy olyan típust t jelöl, l, ami egy függvf ggvényt tartalmaz (C++ : egy függvf ggvényre mutató pointer) public class Gomb public event EsemenyKezelo Click; // a fent definiált delegate típust pusú változó public void Reset() Click = null; Click használata: kizárólag += vagy -= = bal oldalán n szerepelhet. += hozzáad egy esemény kezelőt, -= elvesz egyet. Pl. : void Gomb_Kattintas(object sender, System.EventArgs e) // csinál l valamit Gomb gomb1 = new Gomb(); gomb1.click +=.new EsemenyKezelo(Gomb_Kattintas); Lehetséges saját t esemény hozzáad adó,, ill. eltávol volító függvényt is defininiálni.

Leszármaztat rmaztatás using System; abstract class A // absztrakt: nem lehet objektumot létrehozni l belőle le public abstract void F(); // nincs megadva mit csinál class B : A public override void F() // átdefiniálva Console.WriteLine(" ("B.F"); public virtual void G() // virtual átdefiniálható a leszármaztatott osztályban Console.WriteLine(" ("B.G"); class C: B public override void G() // az átdefiniáláshoz kell az override base.f.f(); // a szülő osztály módszerem Console.WriteLine(" ("C.G");");

struct Hasonló az osztályhoz, vagy az interface- ekhez de: nem lehet leszármaztatni belőle le érték-ként adódik dik át t (osztály referenciaként) nt) stack-en tároljat időnk nként nt sok allokáci ciót t takaríthatunk thatunk meg vele

interface-ek ek módszereket, property-ket, indexer-eket eket és s event-eket eket tartalmazhat. Pl. interface IPeldaI string this[int index] get; set; event EventHandler E; void F(int v); string P get; set; public delegate void EventHandler(object sender, EventArgs e); Az interface-ben a mezők k nincsenek megvalósítva

interface-k k 2. Interface-ekkel ekkel oldható meg a többszt bbszörös s leszármaztat rmaztatás. Egy osztály csak 1 osztályb lyból, l, de bármennyi b interface-ből származtathat rmaztatható le: class A virtual public void F(inti) ) interface IPelda1 void P1(int i); interface IPelda2 void P2(string s); class B : A, IPelda1, IPelda2 public override void F() // A-bólA public void P1(int i) // implicit interface elem IPelda1-ból void IPelda2.P2(string s; ) // explicit interface elem IPelda1-ból Hívásaik: class Test static void Main() B b = new B(); b.f(); b. P1(3); b.p2("alma") // error: no such method. az explicit elemet nem lehet meghívni így! IPelda2 ipelda2 = b; // a leszármaztat rmaztatás s miatt b egyúttal IPelda2 is ipelda2.p2("alma"); // ez már m r jój

C# - C++ összehasonlítás Mindkettőben a kis és s nagybetű különböző.. de C#- ban Nincsenek globális lis változv ltozók, vagy függvf ggvények, minden vmilyen osztályon belül l van Egy blokk lokális lis változv ltozói i nem fedhetik el a blokkon kívülieket A bool típus nem konvertálhat lható más s típusst pussá Mutatók által mutatott memóri riát t csak unsafe jelölésű szakaszokban lehet használni, ott is csak ha megfelelő engedély van rá. r. (Mutatót t használni máshol m is lehet, de az általa mutatott memóri riát/változót t nem)

C# - összehasonlítása a a C++ -al A 0 indexű parancssori paraméter a C++ ban az 1 indexű lenne (a program neve nincs a paraméterek között) k A memóri riában automatikus szemétösszegy sszegyűjtés s van. A csak absztrakt függvényeket tartalmazó absztrakt osztály neve nem class, hanem interface Nincs többszt bbszörös s leszármaztat rmaztatás class-szal szal,, de van interface-szel struct: mint a class, de c#-ban nem lehet sem őt t magát, sem belőle le leszármaztatni. (de a struct-ok is a System.Object leszármazottai rmazottai) ) Nem lehet paraméter nélkn lküli li constructor-a. Ha nem adunk meg constructort a változók k default értéket (pl. 0, null) kapnak. Típusok közötti k konverzió általában csak explicit lehet. (kivétel pl. leszármaztat rmaztatás, integer) Felsorolásos sos típusoknak t saját t namespace-e e van properties A típusokhozt meta-infom infomációk tartoznak

C# Részleges osztály definíci ciók több fájlra f eloszthatóak ak (így pl. csak azt látjuk, l ami abban a fájlban f érdekes) PL. legyen az Univerzum osztály két k t fájlban f (uni1.cs( és uni2.cs) ) definiálva.

partial class példap Az univ1.cs fájlbanf public partial class Univerzum public Univerzum() _azon_ = 0; Az univ2.cs fájlbanf public partial class Univerzum private int _azon;

C# Generics futás s közben k az aktuális típus t felhasználásával jönnek j létre l (C++ template-ek ek fordítási időben)