objektum orientált programozás c# nyelven 2 p5.pdf · az els. ő. c# program egy . elso.cs....

26
Programoz Programoz á á s 2 s 2 Objektum Objektum O O rient rient á á lt Programoz lt Programoz á á s s C# nyelven C# nyelven utols utols ó ó v v á á ltoztat ltoztat á á s 2008.05.02. s 2008.05.02.

Upload: others

Post on 29-Aug-2019

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

ProgramozProgramozáás 2s 2

ObjektumObjektum

OOrientrientáált Programozlt ProgramozáássC# nyelvenC# nyelven

utolsutolsóó

vvááltoztatltoztatáás 2008.05.02.s 2008.05.02.

Page 2: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

.NET.NETC# C# -- Microsoft talMicrosoft taláálmlmáánya a .NET platform sznya a .NET platform száámmáára. A C++ 'tovra. A C++ 'továábbfejlesztbbfejlesztéése'se'.NET .NET –– hháállóózaton elosztott programok egyzaton elosztott programok együüttmttműűkkööddééseseElElőőnyei:nyei:

Nyelv fNyelv füüggetlen, fordggetlen, fordííttáás ks köözzöös ks köözbenszbensőő nyelvre (nyelvre (CCommon ommon IIntermediate ntermediate LLanguage), anguage), amit futamit futáás ks köözben fordzben fordíít le a rendszer gt le a rendszer géépi kpi kóódra (dra (JJust ust IIn n TTime compiler)ime compiler)potencipotenciáális egyszerlis egyszerűűssííttéés: ks: kóódok csoportjai csak egydok csoportjai csak egy--egy helyen vannakegy helyen vannakkküüllöönbnböözzőő ttíípuspusúú (Windows(Windows--os) eszkos) eszköözzöök ugyanazzal a kk ugyanazzal a kóóddal tddal táámogathatmogathatóóakakMicrosoft (Microsoft (éés ms máások) ksok) köönnyebben szabnnyebben szabáályozhatjlyozhatjáák ki mikor mit futtathatk ki mikor mit futtathatNyNyíílt szabvlt szabváányokon (is) alapul: XML (nyokon (is) alapul: XML (Extensible Markup Language Extensible Markup Language ) ) éés SOAP s SOAP (eredetileg '(eredetileg 'Simple Object Access Protocol' Simple Object Access Protocol' ')')

HHáátrtráányai: nyai: ErErőőforrforráás igs igéénye a nye a CCommon ommon LLanguage anguage RRuntime miatt nagyuntime miatt nagyWindows specifikus (van linuxWindows specifikus (van linux--os open source pros open source próóbbáálkozlkozáás MONO, DotGNU ), de ezek s MONO, DotGNU ), de ezek nem teljesek (.NET 1.1 APIs teljes, 2.0 nem teljesek (.NET 1.1 APIs teljes, 2.0 –– 96%, 3 96%, 3 éés 3.5 s 3.5 --alfa)alfa)Egyes fEgyes füüggvggvéények a nyek a BBase ase CClass lass LLibraryibrary--ben Microsoft szabadben Microsoft szabadaalommal vlommal véédettekdettekMMáár most tr most tööbb, mint 6000 fbb, mint 6000 füüggvggvéénye vannye van

Page 3: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

Az elsAz elsőő C# programC# programEgy Egy elso.cselso.cs nevnevűű ffáájlba jlba íírjuk be a krjuk be a köövetkezvetkezőőket:ket:using Systemusing System;;

// // ki ki éés bevitelhez a namespaces bevitelhez a namespace

class class KoszonesKoszones

// minden vmilyen oszt// minden vmilyen osztáályban vanlyban van{{

// ide nem k// ide nem kééne public, mert a Main()ne public, mert a Main()--t nem ht nem híívhatjuk megvhatjuk meg// a static azt jelenti, hogy objektum l// a static azt jelenti, hogy objektum léétrehoztrehozáás ns néélklküül is hasznl is hasznáálhatlhatóópublic static void public static void Main(stringMain(string[] [] argsargs))

// itt kezd// itt kezdőődik a futdik a futááss

{{

// args// args[0][0]

az elsaz elsőő

paramparamééter, nem a program neveter, nem a program neve// kiirat// kiiratáás s {0}{0}

az elsaz elsőő

behelyettesbehelyettesíítendtendőő

paramparamééterterConsole.WriteLine("SziaConsole.WriteLine("Szia

{0}!", args[0]);{0}!", args[0]);

// itt az args// itt az args[0][0]

Console.ReadLineConsole.ReadLine();();

// // csakcsak, , hogyhogy

azaz

ablakablak

nene

csukcsukóódjdjoon be a n be a Visual StudioVisual Studio--

bbóól futtatva.l futtatva.}}

}}

Page 4: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

C# alap tC# alap tíípusokpusok

Boolean Boolean –– csak csak truetrue, vagy , vagy falsefalse lehet.lehet.EgEgéészek:szek:sbytesbyte 88 --128 128 …… 128128

bytebyte 88 0 0 …… 256256

shortshort 1616 --32768 to 32767 32768 to 32767

ushortushort 1616 0...655350...65535

intint 3232 --2147483648 to 2147483647 2147483648 to 2147483647

uintuint 3232 00……4294967295 4294967295

longlong 6464 --9223372036854775808 to 9223372036854775807 9223372036854775808 to 9223372036854775807

ulongulong 6464 0 to 184467440737095516150 to 18446744073709551615

charchar 1616 0..655350..65535

Page 5: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

C# alap tC# alap tíípusokpusokvalvalóós szs száámokmok

stringekstringekescape sorozatok: escape sorozatok: \\' ' \\" " \\\\ \\00 ((nemnem azonosazonos a a nullnull éértrtéékkelkkel) ) \\a a \\b b \\f f \\n n \\r r \\t t \\vv

nnéévv hosszhossz éértrtéékes kes jegyekjegyek

tartomtartomáányny

floatfloat 3232 77 1.5 x 101.5 x 10--4545

to 3.4 x 10to 3.4 x 103838

doubledouble 6464 1515 5.0 x 105.0 x 10--324324

to 1.7 x 10to 1.7 x 10308308

decimaldecimal 128128 2828--2929 1.0 x 101.0 x 10--2828

to 7.9 x 10to 7.9 x 102828

Page 6: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

C# tC# tíípusokpusokMinden tMinden tíípus a pus a System.ObjectSystem.Object osztosztáályblybóól van leszl van leszáármaztatva, ezrmaztatva, ezéért rt vannakvannakmetmetóódusaidusai

Pl. Pl. int a = 3; int a = 3; string s = a.ToString()string s = a.ToString();;

TTöömbmböök (pk (pééldldáák)k)iintnt[] [] myIntsmyInts

= { 5, 10, 15 };= { 5, 10, 15 };

// integer // integer ttöömbmbmyIntmyInts[2] = 9;s[2] = 9;

ekvivalensekvivalens deklardeklaráácicióó éés defins definíícicióó: : intint[] [] myIntsmyInts

= new = new intint[] { 5, 10, 15 };[] { 5, 10, 15 };string[] string[] myStringsmyStrings

= new string[3]; = new string[3]; assert(string[0]) == null)assert(string[0]) == null)

boolbool[][] [][] myBoolsmyBools

= new bool[2][];= new bool[2][];

//bool t//bool töömbmbööket tartalmazket tartalmazóó

ttöömb ('jagged' array)mb ('jagged' array)myBools[0] = new bool[2];myBools[0] = new bool[2];

// az egyes t// az egyes töömbmböök dimenzik dimenzióójajamyBools[1] = new bool[1];myBools[1] = new bool[1];

// k// küüllöönbnböözhetzhetdouble[,] double[,] myDoublesmyDoubles

= new double[2, 2]; = new double[2, 2]; // k// kéét indext indexűű

ttöömbmbmyDoublesmyDoubles[0,2] = 3.16;[0,2] = 3.16;

FelsorolFelsoroláási tsi tíípusok (enum)pusok (enum)

Page 7: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

FeltFeltéételes teles éés ciklus utass ciklus utasííttáásoksok

Ami a C++ Ami a C++ --ban is megvan, kban is megvan, küüllöönbsnbséégekkel:gekkel:1.1.

switch() argumentuma lehet enum, egswitch() argumentuma lehet enum, egéész sz éés s stringstring

2.2.

Van Van foreachforeach

ciklus. pl:ciklus. pl: string[] string[] gyumolcsgyumolcs

= {"= {"AlmaAlma", ", "K"Köörterte", "", "SzilvaSzilva"};"};

foreachforeach

(string (string aa

in in gyumolcsgyumolcs)) {{

Console.WriteLine("{0} ", Console.WriteLine("{0} ", aa);); }}

Page 8: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

C#C# operoperáátoroktorokKategKategóóriaria operoperáátoroktorok asszociativitasszociativitáás s

elselsőődlegesdleges (x)(x)

x.yx.y

f(xf(x))

a[xa[x]]

x++x++

xx––

newnew

ttypeofypeof

sizeofsizeof

checkedchecked

unchecked unchecked balrabalra

ununáárisris ++

--

!!

~~

++x++x

----xx

((T)xT)x balrabalra

szorzszorzáás, stbs, stb * / %* / % balrabalra

öösszeadsszeadááss + + -- balrabalra

eltoleltolááss << >><< >> balrabalra

relreláácicióóss < > <= >= < > <= >= balrabalra

egyenlegyenlőősséégg == !=== != jobbrajobbra

logikai logikai ÉÉSS && balrabalra

logikai VAGYlogikai VAGY || balrabalra

kizkizáárróó

VAGYVAGY ^̂ balrabalra

feltfeltéételes teles ÉÉSS &&&& balrabalra

feltfeltéételes VAGYteles VAGY |||| balrabalra

feltfeltéételtel …… ? ... : ? ... : …… jobbrajobbra

éértrtéékadkadááss ==

*=*=

/=/=

%=%=

+=+=

--==

<<=<<=

>>=>>=

&=&=

^=^=

|= |= jobbrajobbra

Page 9: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

Nem static metNem static metóódusok (fdusok (füüggvggvéények)nyek)using System;using System;

class class EgyModszeresOsztalyEgyModszeresOsztaly{{

public static void Main() // static: public static void Main() // static: nem kell objektumot lnem kell objektumot léétrehozni hozztrehozni hozzáá (mint a C++(mint a C++--ban)ban){{

string string valasztasvalasztas;;

EgyModszeresOsztalyEgyModszeresOsztaly omom = = newnew EgyModszeresOsztalyEgyModszeresOsztaly();();

dodo{{

valasztasvalasztas = = omom..ValasztValaszt(); (); ......

}}whilewhile (( valasztasvalasztas !=!= 'Q' 'Q' &&&& valasztasvalasztas !=!= 'q');'q');

}}string string ValasztValaszt()() // nem static: objektum kell hozz// nem static: objektum kell hozzáá. ez. ezéért van a new a Mainrt van a new a Main--benben{{ // nem public: k// nem public: kíívvüülrlrőől nem l nem éérhetrhetőő elel

string string valasztasvalasztas; ; valasztasvalasztas = = Console.ReadLineConsole.ReadLine();();return return valasztasvalasztas;;

}}}}

Page 10: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

OsztOsztáályoklyokClassClass

Minden elem (objektum, vMinden elem (objektum, vááltozltozóó, konstans, f, konstans, füüggvggvéény, stb) valamilyen osztny, stb) valamilyen osztáályban vanlyban vanA hozzA hozzááfféérréési jogokat minden elemhez meg kell adni.si jogokat minden elemhez meg kell adni.Ezek lehetnek:Ezek lehetnek:

publicpublic bbáárki hozzrki hozzááfféérhetrhet

protectedprotected csak a class csak a class éés leszs leszáármaztatottjai frmaztatottjai féérhetnek hozzrhetnek hozzáá

internalinternal csak ebbcsak ebbőől l a a gygyűűjtemjteméénynybbőől (azaz az egyl (azaz az együütt fordtt fordíított tott ffáájlokbjlokbóól l ––

úún. assemblyn. assembly--bbőől) hozzl) hozzááfféérhetrhetőő, de itt , de itt

mindenki szmindenki száámmáára (azaz itt olyan, mintha public lenne)ra (azaz itt olyan, mintha public lenne)protected internalprotected internal ebben az assemblyebben az assembly--ben public, mben public, máás assemblyks assemblyk--ben ben

protectedprotectedprivateprivate csak maga az osztcsak maga az osztáály fly féérhet hozzrhet hozzáá

az osztály elemei lehetnek static-ok. Ezek használatához nem kell objektumot létrehozni.

Page 11: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

OsztOsztáályok 2lyok 2constructor constructor –– public, private, public, private,

static static ––

nincs paramnincs paraméétere, nem htere, nem híívhatvhatóóexplicit mexplicit móódon (newdon (new--val)val)

destructor destructor –– nincs paramnincs paraméétere, nem htere, nem híívhatvhatóó meg, nem lehet meg, nem lehet public, stbpublic, stbkonstans elemek konstans elemek –– defindefiníícicióó szerint staticszerint static--ek, de nem szabad a ek, de nem szabad a static kstatic kuulcsszlcsszóót elt elééjjüük k íírni:rni:

Pl.:Pl.:public const int A=175; public const int A=175; public const int B = A + 6;public const int B = A + 6;

A static elemek is megvA static elemek is megvááltoztathatltoztathatóóak de ez letilthatak de ez letilthatóó::public static public static readonlyreadonly

int piros;int piros;

A readonly elemek A readonly elemek éértrtéékkéét csak deklart csak deklaráácicióóban, illetve constructorban lehet ban, illetve constructorban lehet megadni:megadni:

Page 12: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

OsztOsztáályok 3.lyok 3.class Color class Color { {

internal internal ushortushort

redPartredPart; ; internal internal ushortushort

bluePartbluePart; ; internal internal ushortushort

greenPartgreenPart; ;

publicpublic

Color(Color(ushortushort

red,red,

ushorushortt

blue,blue,

ushortushort

green) green) { {

redPartredPart

= red; = red; bluePartbluePart

= blue; = blue; greenPartgreenPart

= green; = green; } } public static public static readonlyreadonly

Color Red = new Color(0xFF, 0, 0); Color Red = new Color(0xFF, 0, 0); public static public static readonlyreadonly

Color Blue = new Color(0, 0xFF, 0); Color Blue = new Color(0, 0xFF, 0); public static public static readonlyreadonly

Color Green = new Color(0, 0, 0xFF); Color Green = new Color(0, 0, 0xFF); public static public static readonlyreadonly

Color White = new Color(0xFF, 0xFF, 0xFF); Color White = new Color(0xFF, 0xFF, 0xFF); } }

Page 13: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

FFüüggvggvéényparamnyparamééterek terek ÉÉrtrtéék (value) paramk (value) paramééterekterek

int F(int i) int F(int i) { return 2 * i; } { return 2 * i; } --> > intint

k = F(12); k = F(12); intint

j = j = F(kF(k););

refref paramparamééterek terek –– referenciareferenciaintint

F( F( refref

intint

i) { return 2 * i;} i) { return 2 * i;} --> > intint

i =4; i =4; intint

k = k = F(iF(i); ); // i == 8 // i == 8

outout paramparamééterek terek –– csakcsak output output a belsa belsőő paramparamééter ter éértrtéékkéét adja t adja áát t az out paramaz out paramééterbenterben

class C; class C; int F( int F( out C c) { C cc; out C c) { C cc; …… c = cc; return 1; } c = cc; return 1; }

paramsparams paramparamééterek terek –– vvááltozltozóó hosszhosszúússáággúúintint

F(F(paramsparams

intint

[] Param1) { [] Param1) { foreachforeach(int(int

P in Param1) {P in Param1) {……} return v; }} return v; }

TTúúlterhellterheléés:s:A fA füüggvggvéények argumentumainak sznyek argumentumainak szááma, tma, tíípusa, mpusa, móódosdosííttóói ki küüllöönbnbööznek. Pl.znek. Pl.

Page 14: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

TTúúlterhellterheléés s -- OverloadingOverloadingusing System; using System; class Test class Test { {

static void F() { static void F() { Console.WriteLine("FConsole.WriteLine("F()"); } ()"); } static void static void F(objectF(object

o) { o) { Console.WriteLine("F(objectConsole.WriteLine("F(object)"); })"); }static void static void F(intF(int

value) { value) { Console.WriteLine("F(intConsole.WriteLine("F(int)"); } )"); } static void static void F(refF(ref

intint

value) { value) { Console.WriteLine("F(refConsole.WriteLine("F(ref

intint)"); })"); }static void static void F(intF(int

a, a, intint

b) { b) { Console.WriteLine("F(intConsole.WriteLine("F(int, , intint)"); })"); }static void static void F(intF(int[] values) { [] values) { Console.WriteLine("F(intConsole.WriteLine("F(int[])"); }[])"); }static void Main() static void Main()

{ { F(); F(); F(1); F(1); intint

i = 10; i = 10; F(refF(ref

i); i); F((object)1);F((object)1);F(1, 2); F(1, 2); F(newF(new

intint[] {1, 2, 3}); [] {1, 2, 3}); } }

} }

Page 15: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

PropertyProperty--kkúúgy haszngy hasznáálhatlhatóó minthamintha vvááltozltozóó lenne, de vallenne, de valóójjáában fban füüggvggvéényhnyhíívváás:s:public class public class GombGomb{ {

private string private string szovegszoveg; ; public string public string SzovegSzoveg{ {

get { return get { return szovegszoveg; } ; } // olvas// olvasáás: amikor a Szs: amikor a Szööveg egy veg egy éértrtéékadkadáás jobb oldals jobb oldaláán szerepeln szerepelset { caption = value; Repaint(); } set { caption = value; Repaint(); } // // íírráás: ha a Szs: ha a Szööveg egy veg egy éértrtéékadkadáás bal oldals bal oldaláán szerepeln szerepel// // valuevalue

––

az az éértrtéékadkadáás jobb oldals jobb oldaláárróól szl száármazrmazóó

éértrtéék neve a set k neve a set --en belen belüüll

// a compiler ezt a nevet v// a compiler ezt a nevet váárjarja} } void UjraRajzol() void UjraRajzol() { { …… }}

Gomb b = new Gomb();Gomb b = new Gomb();b.Szoveg = "Kilb.Szoveg = "Kilééppéés"; s"; // ez egy// ez egyúúttal ttal úújra is rajzolja a szjra is rajzolja a szööveget a gombraveget a gombra

} }

Page 16: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

IndexerIndexer--ekekvalamelyvalamely osztosztáályly úúgy kezelhetgy kezelhetőő, mintha t, mintha töömb lennemb lenne. r. rááadadáásusul l nemnem is is csakcsak intint argumentummalargumentummal::

class AsszociativIntTombclass AsszociativIntTomb{{

private private int int [] [] _arr_arr;;pubkicpubkic

AsszociativIntTombAsszociativIntTomb((intint

size) size) { {

__arrarr

= new = new intint[[sizesize]; ]; }}intint

this[stringthis[string

s]s]

// // ezez

azaz

indexerindexer

nincs sajnincs sajáát neve, csak a this hasznt neve, csak a this hasznáálhatlhatóó{{

// ugyan// ugyanúúgy tgy túúlterhelhetlterhelhetőő, mint b, mint báármely mrmely máás fs füüggvggvéénynygetget{{

int i = int.Parse(s);int i = int.Parse(s);

// a string// a string--bbőől integerl integer--t csint csináállreturn _arr[i];return _arr[i];

}}setset{{

int i = int.Parse(s);int i = int.Parse(s);_arr[i] = value;_arr[i] = value;

} } }}

}}HasznHasznáálata: lata:

AsszociativIntTomb tomb AsszociativIntTomb tomb = new = new AsszociativIntTombAsszociativIntTomb(3); (3); tomb["1"] = 123;tomb["1"] = 123;

Page 17: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

EsemEseméényeknyekPl. egy gombnyomPl. egy gombnyomáás:s:

public public delegatedelegate

void void EsemenyKezeloEsemenyKezelo(object sender, (object sender, System.EventArgsSystem.EventArgs

e); e); // a // a delegatedelegate

egy olyan tegy olyan tíípust jelpust jelööl, ami egy fl, ami egy füüggvggvéényt tartalmaz (C++ : egy fnyt tartalmaz (C++ : egy füüggvggvéényre mutatnyre mutatóó

pointer)pointer)

public class public class GombGomb{ {

public public eventevent

EsemenyKezeloEsemenyKezelo

Click; Click; // a fent defini// a fent definiáált delegate tlt delegate tíípuspusúú

vvááltozltozóó

public void Reset() { Click = null; } public void Reset() { Click = null; } } }

Click Click hasznhasznáálata: lata: kizkizáárróólag += vagy lag += vagy --= bal oldal= bal oldaláán szerepelhet. n szerepelhet. +=+=

hozzhozzááad egy esemad egy eseméény kezelny kezelőőt, t, --==

elvesz egyet. Pl. :elvesz egyet. Pl. :void Gomb_Kattintas(object sender, void Gomb_Kattintas(object sender, System.EventArgsSystem.EventArgs

e)e){{

// csin// csináál valamitl valamit}}

Gomb gomb1 = new Gomb();Gomb gomb1 = new Gomb();gomb1.Click +=.new EsemenyKezelo(Gomb_Kattintas);gomb1.Click +=.new EsemenyKezelo(Gomb_Kattintas);

LehetsLehetsééges sajges sajáát esemt eseméény hozzny hozzááadadóó, ill. elt, ill. eltáávolvolííttóó ffüüggvggvéényt is definininyt is defininiáálni.lni.

Page 18: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

LeszLeszáármaztatrmaztatáássusing System; using System; abstractabstract

class A class A // absztrakt: nem lehet objektumot l// absztrakt: nem lehet objektumot léétrehozni beltrehozni belőőlele{ {

public public abstractabstract

void void FF(); (); // nincs megadva mit csin// nincs megadva mit csinááll} } class class BB

: A: A{ { public public overrideoverride

void F()void F()

// // áátdefinitdefiniáálvalva{{

Console.WriteLineConsole.WriteLine("("BB.F"); .F"); }}public public virtualvirtual

void void GG() () // virtual // virtual ––

áátdefinitdefiniáálhatlhatóó

a a leszleszáármaztatottrmaztatott

osztosztáálybanlyban{ {

Console.WriteLineConsole.WriteLine("("BB.G"); .G"); } }

} } class class CC: : BB{ { public public overrideoverride

void void GG() () // az // az áátdefinitdefiniáállááshoz kell az overrideshoz kell az override{{

basebase.F.F(); (); // a sz// a szüüllőő

osztosztáály mly móódszeredszereConsole.WriteLineConsole.WriteLine("("CC..GG"); ");

} } } }

Page 19: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

structstruct

HasonlHasonlóó az osztaz osztáályhoz, vagy az interfacelyhoz, vagy az interface--ekhez de:ekhez de:

nem lehet lesznem lehet leszáármaztatni belrmaztatni belőőleleéértrtéékk--kkéént adnt adóódik dik áát (osztt (osztáály referenciakly referenciakéént)nt)stackstack--en ten táároljarolja

ididőőnknkéént sok alloknt sok allokáácicióót takart takarííthatunk meg velethatunk meg vele

Page 20: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

interfaceinterface--ekekmmóódszereket, propertydszereket, property--ket, indexerket, indexer--eket eket éés events event--eket eket tartalmazhat. Pl.tartalmazhat. Pl.

interface Iinterface IPeldaPelda{ {

string string this[intthis[int

index] { get; set; } index] { get; set; } event event EventHandlerEventHandler

E; E;

void void F(intF(int

v); v); string P { get; set; } string P { get; set; }

} } public delegate void public delegate void EventHandler(objectEventHandler(object

sender, sender, EventArgsEventArgs

e); e);

Az interfaceAz interface--ben a mezben a mezőők nincsenek megvalk nincsenek megvalóóssíítvatva

Page 21: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

interfaceinterface--k 2.k 2.InterfaceInterface--ekkel oldhatekkel oldhatóó meg a tmeg a tööbbszbbszöörröös leszs leszáármaztatrmaztatáás. Egy oszts. Egy osztáály csak 1 osztly csak 1 osztáályblybóól, de bl, de báármennyi interfacermennyi interface--bbőől l szszáármaztathatrmaztathatóó le:le:

class A { virtual public void class A { virtual public void F(intiF(inti) { ) { …… } }} }interface IPelda1 { void P1(int i); }interface IPelda1 { void P1(int i); }interface IPelda2 { void P2(string s); }interface IPelda2 { void P2(string s); }class B class B : A, IPelda1, IPelda2: A, IPelda1, IPelda2{{

……public override void F() { public override void F() { …… } } // A// A--bbóóllpublic void P1(int i) { public void P1(int i) { …… } } // implicit // implicit interface eleminterface elem

IPelda1IPelda1--bbóóllvoid IPelda2.P2(string s; ) { void IPelda2.P2(string s; ) { …… }}

// // explicitexplicit

interface eleminterface elem

IPelda1IPelda1--bbóóll}}

HHíívváássaikaik::class Test class Test { {

static void Main() static void Main() { {

B b = new B(); B b = new B(); b.Fb.F(); (); b. P1(3); b. P1(3); b.P2("alma") b.P2("alma") // error: no such method. // error: no such method. azaz

explicit explicit elemetelemet

nemnem

lehetlehet

meghmeghíívnivni

íígygy!!IPelda2 ipelda2 = b; IPelda2 ipelda2 = b; // a lesz// a leszáármaztatrmaztatáás miatt b egys miatt b egyúúttal IPelda2 isttal IPelda2 isipelda2.P2("alma"); ipelda2.P2("alma"); // ez m// ez máár jr jóó

}}}}

Page 22: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

C# C# -- C++ C++ öösszehasonlsszehasonlííttáássMindkettMindkettőőben a kis ben a kis éés nagybets nagybetűű kküüllöönbnböözzőő. de C#. de C#--banbanNincsenek globNincsenek globáális vlis vááltozltozóók, vagy fk, vagy füüggvggvéények, nyek, minden vmilyen osztminden vmilyen osztáályon bellyon belüül vanl vanEgy blokk lokEgy blokk lokáális vlis vááltozltozóói nem fedhetik el a blokkon i nem fedhetik el a blokkon kkíívvüülieketlieketA A boolbool ttíípus nem konvertpus nem konvertáálhatlhatóó mmáás ts tíípusspussááMutatMutatóók k ááltal mutatott memltal mutatott memóóririáát csak t csak unsafe unsafe jeljelööllééssűűszakaszokban lehet hasznszakaszokban lehet hasznáálni, ott is csak ha megfelellni, ott is csak ha megfelelőőengedengedéély van rly van ráá. (Mutat. (Mutatóót hasznt hasznáálni mlni mááshol is lehet, shol is lehet, de az de az ááltala mutatott memltala mutatott memóóririáát/vt/vááltozltozóót nem)t nem)

Page 23: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

C# C# -- öösszehasonlsszehasonlííttáássa a a a C++ C++ --alalA 0 indexA 0 indexűű parancssori paramparancssori paramééter a C++ ban az 1 indexter a C++ ban az 1 indexűű lenne (a program lenne (a program neve nincs a paramneve nincs a paramééterek kterek köözzöött)tt)A memA memóóririáábabann automatikus szemautomatikus szemééttöösszegysszegyűűjtjtéés van.s van.A A csakcsak absztraktabsztrakt ffüüggvggvéényeket tartalmaznyeket tartalmazóó absztrakt absztrakt osztosztáályly neveneve nem class, nem class, hanem hanem interfaceinterfaceNincs tNincs tööbbszbbszöörröös leszs leszáármaztatrmaztatááss classclass--szalszal, de van , de van interfaceinterface--szelszelstruct: struct: mint amint a class, class, de c#de c#--ban nem lehet sem ban nem lehet sem őőt magt magáát, sem belt, sem belőőle le leszleszáármaztatni. rmaztatni. (de a(de a structstruct--ok is a ok is a System.ObjectSystem.Object leszleszáármazottairmazottai) Nem lehet ) Nem lehet paramparamééter nter néélklküüli li constructorconstructor--a. Ha nem adunk meg constructort a a. Ha nem adunk meg constructort a vvááltozltozóók default k default éértrtééket (pl. 0, null) kapnak.ket (pl. 0, null) kapnak.TTíípusok kpusok köözzöötti konverzitti konverzióó ááltalltaláában csak explicit lehet. (kivban csak explicit lehet. (kivéétel pl. tel pl. leszleszáármaztatrmaztatáás, integer)s, integer)FelsorolFelsoroláásos tsos tíípusoknak sajpusoknak sajáát namespacet namespace--e vane vanpropertiespropertiesA tA tíípusokhozpusokhoz metameta--infominfomáácicióók k tartoznaktartoznak

Page 24: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

C#C#

RRéészleges osztszleges osztáály definly definíícicióók k –– ttööbb fbb fáájlra jlra eloszthateloszthatóóakak ((íígygy pl. csak azt lpl. csak azt láátjuk, ami abban tjuk, ami abban a fa fáájlban jlban éérdekes)rdekes)PL. legyen az Univerzum osztPL. legyen az Univerzum osztáály kly kéét ft fáájlban (jlban (uni1.csuni1.cs

éés s uni2.csuni2.cs) defini) definiáálva.lva.

Page 25: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

partial class ppartial class pééldalda

Az univ1.cs fAz univ1.cs fáájlbanjlbanpublic partial class Univerzumpublic partial class Univerzum{{

public public UniverzumUniverzum() { _() { _azonazon

= 0; }= 0; }}}

Az univAz univ22.cs f.cs fáájlbanjlbanpublic partial class Univerzumpublic partial class Univerzum{{private private intint

__azonazon;;

}}

Page 26: Objektum Orientált Programozás C# nyelven 2 P5.pdf · Az els. ő. C# program Egy . elso.cs. nevűfájlba írjuk be a következőket: using System; // ki és bevitelhez a namespace

C#C#

GenericsGenerics –– futfutáás ks köözben az aktuzben az aktuáális tlis tíípus pus felhasznfelhasznáálláássáával jval jöönnek lnnek léétre (C++ templatetre (C++ template--ek ek fordfordííttáási idsi időőben)ben)