objektum orientált programozás c# nyelven 2 p5.pdf · az els. ő. c# program egy . elso.cs....
TRANSCRIPT
ProgramozProgramozáás 2s 2
ObjektumObjektum
OOrientrientáált Programozlt ProgramozáássC# nyelvenC# nyelven
utolsutolsóó
vvááltoztatltoztatáás 2008.05.02.s 2008.05.02.
.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
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.}}
}}
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
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
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)
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);); }}
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
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;;
}}}}
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.
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:
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); } }
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.
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}); } }
} }
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
} }
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;
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.
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"); ");
} } } }
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
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
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óó
}}}}
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)
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
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.
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;;
}}
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)