Professional Documents
Culture Documents
www.eemdersnotlari.com
alar GL
1
YeniC#ProjesiAma ________________________________________________________ 4
C#ConsolleAppilicationProjesiAma___________________________________________4
Console.WriteKomutuveKullanm_________________________________________________ 4
Console.WriteLineKomutuveKullanm _____________________________________________ 5
Console.ReadLineKomutuveKullanm______________________________________________ 7
TEMELVERTPLER _________________________________________________________8
DeerTipleri(Valuetype)_________________________________________________________ 9
ReferansTipleri(ReferenceType)___________________________________________________ 9
TRDNMLER________________________________________________________10
BilinsizTrDnm__________________________________________________________ 10
BilinliTrDnm___________________________________________________________ 11
OPERATRLER_____________________________________________________________13
MatematikselOperatrler________________________________________________________ 14
+veOperatrleri ____________________________________________________________________14
*ve/Operatrleri______________________________________________________________________15
%Operatr _________________________________________________________________________15
++(Arttrma)ve(Eksiltme)Operatrleri___________________________________________________15
KarlatrmaOperatrleri________________________________________________________ 16
asOperatr_________________________________________________________________________17
isOperatr__________________________________________________________________________17
MantksalOperatrler___________________________________________________________ 18
BitselOperatrler_______________________________________________________________ 18
BitselKaydrmaOperatrleri_____________________________________________________________19
AtamavelemliAtamaOperatrleri_______________________________________________ 19
AKIKONTROLMEKANZMALARI _____________________________________________22
Koulfadeleri__________________________________________________________________ 22
ifelse_______________________________________________________________________________22
switch_______________________________________________________________________________24
DngYaplar _________________________________________________________________ 27
forDngs__________________________________________________________________________27
whileDngs________________________________________________________________________32
dowhileDngs _____________________________________________________________________33
foreachDngs______________________________________________________________________33
AtlamaDeyimleri_______________________________________________________________ 34
breakAnahtarSzc_________________________________________________________________34
continueanahtarSzc_______________________________________________________________34
gotoAnahtarSzc__________________________________________________________________34
DZLER __________________________________________________________________36
ArraysTekBoyutluDiziler ______________________________________________________ 36
ArrayskiBoyutluMatrisDiziler__________________________________________________ 39
METOTLARVEFONKSYONLAR _______________________________________________44
MetotOluturmaveKullanm ____________________________________________________ 45
Metotlarlalgilinemlizellikler__________________________________________________ 47
MetotParametresiOlarakDiziler__________________________________________________ 49
DiziveDeikenParametrelerArasndakiFark_______________________________________ 50
MetotlarnArYklenmesi ______________________________________________________ 52
DeikenSaydaparametreAlanMetotlar __________________________________________ 54
KendiniaranMetotlar ________________________________________________________ 57
MainMetodu__________________________________________________________________ 58
MainMetodununDeerTutmas __________________________________________________ 58
MainMetodununParametreAlmas _______________________________________________ 58
SINIFLAR _________________________________________________________________60
SnfOluturmak________________________________________________________________ 60
AynSnfTrndenBirdenFazlaNesneOluturma ___________________________________ 62
ThisAnahtarSzc____________________________________________________________ 68
getvesetAnahtarSzc_______________________________________________________ 71
YapcMetotlar_________________________________________________________________ 77
BLM1
Yeni C# Projesi Ama
Write komutu consol ekranna bir yaz yazdrmak veya kullancdan bilgi istemek amacyla
kullanlr. Write komutundan sonra yaz yazma ibresi yazdrdnz mesajn yannda yanp
sner yani kullancdan alacanz mesaj sizin mesajnzn yanna yazlr.
ilkuygulama.cs
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceilk_uygulama
{
classProgram
{
staticvoidMain(string[]args)
{
Console.Write("ilkUygulama");
Console.ReadLine();
}
}
}
Ekrankts
ilkuygulama2.cs
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceilk_uygulama2
{
classProgram
{
staticvoidMain(string[]args)
{
Console.WriteLine("ilkUygulama");
Console.ReadLine();
}
}
}
Ekrankts
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceilk_uygulama3
{
classProgram
{
staticvoidMain(string[]args)
{
Console.WriteLine("Birsayigiriniz");
inta=Convert.ToInt32(Console.ReadLine());
Console.WriteLine(a);
Console.ReadLine();
}
}
}
Burada girilen say a deikenine atanp integer (saysal) olarak dntrlp ekrana yazdrlyor.
Ekran kts
BLM2
TEMEL VER TPLER
C# da iki eit veri tipi vardr:
Deer
Tip Ad
Aralk Deerleri
sbyte
byte
short
ushort
int
Aklama
System Tipi
System.SByte
0 ile 255
System.Byte
System.Int16
System.UInt
System.Int32
System.UInt32
System.Int64
System.UInt64
0 ile 65.535
-2.147.483.648 ile 2.148.483.647
uint
0 ile 4.294.967.295
long
-9.223.372.036.854.775.808 ile
9.223.372.036.854.775.807
ulong
0 ile 18.446.744.073.709.551.615
float
System.Single
double
System.Double
decimal
System.Decimal
System.Bool
System.Char
bool
True ya da False
char
Deer Tip Ad
Aklama
System Tipi
object
System.Object
string
System.String
BLM3
TR DNMLER
Bilinsiz Tr Dnm
C#'ta dk kapasiteli bir deiken, sabit ya da deiken ve sabitlerden oluan matematiksel
ifade daha yksek kapasiteli bir deikene atanabilir. Buna bilinsiz tr dnm denir,
bunun iin herhangi bir zel kod gerekmez.
usingSystem;
classTurDonusumu
{
staticvoidMain()
{
bytea=5;
shortb=10;
sbytec=30;
intd=a+b+c;
stringe="deneme";
charf='k';
objectg=e+f+d;
longh=d;
floati=h;
doublej=i;
doublek=12.5f;
Console.WriteLine(j+k);
Console.ReadLine();
}
}
Sonu : 57,5
10
Bilinsiz tr dnmyle ilgili ilgin bir durum sz konusudur. char trn kendisinden
daha kapasiteli bir saysal tre bilinsiz olarak dntrebiliriz. Bu durumda ilgili karakterin
Unicode karl ilgili saysal deikene atanacaktr.
usingSystem;
classTurDonusumu
{
staticvoidMain()
{
chara='h';
intb=a;
Console.WriteLine(b);
Console.ReadLine();
}
}
Sonu : 104
Bilinsiz
tr
dnmyle
ilgili
dier
ilgin
bir
nokta
ise byte, sbyte, short ve ushort trndeki deikenlerle yaplan matematiksel ilemlerdir. Bu
tr durumda oluan matematiksel ifade intleir. Yani aadaki durumda programmz hata
verir:
usingSystem;
classTurDonusumu
{
staticvoidMain()
{
bytea=5,b=10;
shortd=2,e=9;
bytef=a+b;
shortg=d+e;
Console.WriteLine(f+g);
Console.ReadLine();
}
}
Hedef
sbyte
byte
short
ushort
int
uint
float
double
Bilinli Tr Dnm
Bilinli tr dnm genellikle derleyicinin izin vermedii durumlarda kullanlr. Bilinli tr
dnmyle kk trn byk tre dntrlmesi salanabilse de aslnda bu gereksizdir,
11
Sonu: 5
Programmzda da grebileceiniz gibi (byte)a ifadesi, a deikeninin byte hlini tuttu.
Aadaki ekil bilinli tr dnmn anlatmaktadr.
Eer deiken ad ksmnda tek bir deiken yoksa, bir ifade varsa parantez iine alnmas
gerekir. Bu ekilde tr dnm deikenlere uygulanabildii gibi sabitlere de uygulanabilir.
usingSystem;
classTurDonusumu
{
staticvoidMain()
{
byteb=(byte)12.5f;
Console.WriteLine(b);
Console.ReadLine();
}
}
Sonu : 12
12
BLM4
OPERATRLER
Programlama dillerinde tek balarna herhangi bir anlam olmayan ancak programn
ileyiine katkda bulunan karakter ya da karakter topluluklarna operatr denir.
rnein a+b ifadesinde + iareti bir operatrdr. Operatrlerin etki ettikleri sabit ya da
deikenlere ise operand denir. rnein a+b ifadesinde a ve b birer operanddr. C#'ta
operatrlerin bazlar tek, bazlar ift, bazlar da operand alr. Peki eer bir ifadede birden
fazla operatr varsa ne olacak? rnein 2+3*7 gibi bir ifadede nce hangi ilem yaplacak?
Burada nce toplama ilemi yaplrsa sonu 35 olur, ancak nce arpma ilemi yaplrsa sonu
23 olur. te C#'ta bu gibi durumlar nlemek iin operatr ncelii diye kavram
bulunmaktadr. Operatr ncelikleri ile ilgili u kurallar bilmenizde fayda var:
nce parantez ileri yaplr. rnein (3+5)*9 gibi bir ifadede nce toplama ilemi yaplr.
ie parantezler sz konusuysa nce en iteki parantez yaplr, sra ile dtaki parantezlere
gidilir. rnein (2+(9+2)*5)*2 gibi bir ifadede nce 9 ile 2 toplanp 11 deeri bulur, sonra 11
ile 5 arplp 55 deeri bulunur, sonra 55 ile 2 toplanp 57 deeri bulunur, en son da 57 ile 2
arplp 114 deeri bulunur.
Aadaki tabloda operatrler ncelik srasna gre listelenmitir. Tablo, ncelik sras en
nde olandan en geride olana gre sralanmtr. Yani ayn ifadede parantez sz konusu
deilse bu tablodaki daha stte olan operatr daha nce iletilecektir.
Birinci ncelikliler
x++, x--
arpma ve blme
*, /, %
Toplama ve karma
+, -
Kaydrma operatrleri
<<, >>
Eitlik operatr
==, !=
Bitsel Ve (AND)
&
Mantksal Ve
&&
Mantksal Veya
||
Koul operatr
?:
Atama ve ilemli atama operatrleri =, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |=
Dikkat ettiyseniz yukardaki tablodaki baz operatrler ayn srada, yani bunlarn ncelik
sras eit. C#'ta eer operatrler eit ncelikliyse, soldan saa ilem yaplr. Yani 2*6/5
ileminde nce 2 ile 6 arplr, sonra da sonu 5'e blnr. ou durumda bunun sonuca bir
deiiklik yapmad dnlse de baz durumlarda ileme soldan balanmasnn sadan
balamaya gre deiik sonular dourduu durumlara rastlanabilir.
rnein:
usingSystem;
classOperatorler
{
13
staticvoidMain()
{
inti=3*5/7;
Console.Write(i);
Console.ReadLine();
}
}
Bu programda ekrana 0 (sfr) yazlr. nk C# sonunda herhangi bir harf olmayan tam say
sabitleri int sayar ve intin kurallarna gre ilem yapar. int sabitlerle yaplan her ilemden
sonra oluursa - ondalk ksm atlr. Ancak program aadaki gibi deitirirsek sonu
deimeyecektir.
usingSystem;
classOperatorler
{
staticvoidMain()
{
inti=(int)(3f*(5f/7f));
Console.Write(i);
Console.ReadLine();
}
}
Sonu: 2
Burada sabitleri floata dntrdk, dolaysyla da ilemin sonunda float bir sabit olutu.
Sonra tr dntrme operatryle sonucu inte evirip i deikenine atadk ve bu deikeni
de ekrana yazdrdk. imdi isterseniz btn operatrleri tek tek inceleyelim.
Matematiksel Operatrler
+ ve Operatrleri
14
*ve/ Operatrleri
% Operatr
% operatr iki operand almaktadr. Sonu birinci operandn ikinci operanda blmnden
elde edilen kalandr. Btn numerik trler iin kullanlabilir. rnein;
usingSystem;
classOperatorler
{
staticvoidMain()
{
inti=5%2;
Console.Write(i);
Console.ReadLine();
}
}
Sonu: 1
++(Arttrma) ve (Eksiltme) Operatrleri
C#'n en ok kullanlan operatrlerindendir. nne veya sonuna geldii deikeni bir artrr
veya bir eksiltirler, sabitlere uygulanamazlar. Hem uyguland deikenin deerini 1 artrr
veya eksiltirler hem de tutucu vazifesi grrler. n ek ve son ek olmak zere iki ekilde
kullanlabilirler.
rnek;
usingSystem;
classOperatorler
{
staticvoidMain()
{
inta=5;
inti=++a;
Console.Write(i+""+a);
Console.ReadLine();
}
}
Sonu : 6 6
Programda da grdnz gibi ++ operatr hem a'nn deerini bir artrd hem de bu deeri
tuttu ve deer i'ye atand. te n ek ve son ek eklinde kullanmn fark burada ortaya kyor.
usingSystem;
classOperatorler
15
{
staticvoidMain()
{
inta=5;
inti=a++;
Console.Write(i+""+a);
Console.ReadLine();
}
}
Sonu : 5 6
Karlatrma Operatrleri
Karlatrma operatrleri iki saynn birbirine gre bykln ve kkln kontrol
ederler. Tabii ki yalnzca saysal trdeki (char da dhil) deiken ya da sabitlerle
kullanlabilirler. Charla saysal trler karlatrldnda charn Unicode karl hesaba
katlr. Bu operatrler unlardr: < (kktr), > (byktr), <= (kk eittir), >= (byk
eittir), == (eittir), != (eit deildir),. rnekler:
usingSystem;
classOperatorler
{
staticvoidMain()
{
boola=4<6;
boolb=6>5;
boolc=7<=7;
boold=9>=12;
boole=10==12;
boolf=1!=8;
Console.Write("{0}\n{1}\n{2}\n{3}\n{4}\n{5}",a,b,c,d,e,f);
Console.ReadLine();
}
}
Bu program ekrana alt alta True, True, True, False, False ve True yazacaktr.
16
as Operatr
Tm deiken trlerinden objecte ve string deerli olmak artyla objectten stringe dnm
yapar.
rnek:
usingSystem;
classOperatorler
{
staticvoidMain()
{
objecti="50";
strings=iasstring;
Console.Write(s);
Console.ReadLine();
}
}
veya
usingSystem;
classOperatorler
{
staticvoidMain()
{
inti=50;
objects=iasobject;
Console.Write(s);
Console.ReadLine();
}
}
is Operatr
Verilen deiken, sabit ya da ifadenin trn kontrol eder. Eer sz konusu deiken, sabit ya
da ifade verilen trle uyumluysa true deilse false deeri retir. Eer sz konusu deiken,
sabit ya da ifadenin tr her zaman true ya da false retiliyorsa derleyici uyar verir, ancak bu
uyar derlemeye engel deildir. Kullanmna bir rnek:
usingSystem;
classOperatorler
{
staticvoidMain()
{
inti=50;
boolb1=iisint;
boolb2=iisdouble;
boolb3=12isbyte;
boolb4='c'isstring;
boolb5=12f+7isint;
Console.Write("{0}\n{1}\n{2}\n{3}\n{4}",b1,b2,b3,b4,b5);
Console.ReadLine();
}
}
Bu program alt alta True, False, False, False ve False yazacaktr. Dikkat ettiyseniz 12 sabitini
byte saymad ve 12f+7 sabitini de int saymad. nk C#, harfsiz tam say sabitleri int sayar.
12f+7 sabiti de floatlamtr.
17
Mantksal Operatrler
Bu operatrler true veya false sabit ya da deikenleri mantksal ve, veya, deil ilemine
sokarlar. Bunlar && (ve), || (veya) ve ! (deil) operatrleridir.
rnek:
usingSystem;
classOperatorler
{
staticvoidMain()
{
boolb1=35>10&&10==50;//false
boolb2=35>10&&10!=50;//true
boolb3=5isint||12*3==200;//true
boolb4=5<4||45/5==9;//true
boolb5=!(5<4);//true
Console.WriteLine(b1+""+b2+""+b3+""+b4+""+b5);
Console.ReadLine();
}
}
Bitsel Operatrler
Bitsel operatrler saylarn kendisi yerine saylarn bitleriyle ilgilenirler. Dier bir deyile
saylar ikilik sisteme dntrp yle ilem yaparlar. Bu operatrler yalnzca tam say sabit,
deiken ya da ifadelerle kullanlabilirler. Eer bitsel operatrler bool trnden deiken,
sabit ya da ifadelerle kullanlrsa mantksal operatrlerin grd iin aynsn grrler.
rnein aadaki iki kullanm da birbiriyle ayn sonucu douracaktr:
bool b1=false&&false;
bool b1=false&false;
~ (bitsel deil), & (bitsel ve), | (bitsel veya) ve ^ (bitsel zel veya) operatrleri bitsel
operatrlerdir. rnekler:
usingSystem;
classOperatorler
{
staticvoidMain()
{
bytea=5&3;//00000101&00000011>sonu00000001kar.Yani1kar.
byteb=5|3;//00000101|00000011>sonu00000111kar.Yani7kar.
bytec=5^3;//00000101^00000011>sonu00000110kar.Yani6kar.
byted=5;
bytee=(byte)~d;//00000101'indeili>sonu11111010kar.Yani250kar.
bytef=(byte)~(a+b);//00001000'ndeili>sonu11110111kar.Yani247
kar.
byteg=(byte)~(a+7);//00001000'ndeili>sonu11110111kar.Yani247
kar.
Console.Write(a+""+b+""+c+""+e+""+f+""+g);
Console.ReadLine();
}
}
Bitsel operatrler saylar ikilik sisteme dntrp karlkl basamaklar "ve", "veya" veya
"zel veya" ilemine sokarlar ve sonucu operandlaryla birlikte tutarlar. & (ve) ilemi
karlkl basamaklardan her ikisi de 1'se ilgili basamanda 1 tutar, dier durumlarda 0 tutar. |
(veya) ilemi karlkl basamaklarndan herhangi birisi 1'se ilgili basamanda 1 tutar, dier
18
durumlarda 0 tutar. ^ (zel veya) ilemi karlkl basamaklar farklysa ilgili basamanda 1
tutar, dier durumlarda 0 tutar. ~ (deil) operatr operandnn her basaman tersletirip
tutar. Bu operatrlerin operandlar byte, sbyte, short, ushort olmas durumunda sonu intleir.
NOT: Banda 0x veya 0X olan saylar 16'lk dzende yazlm demektir.
rnek:
usingSystem;
classOperatorler
{
staticvoidMain()
{
inta=0xff;
intb=0Xff;
Console.Write(a+""+b);
Console.ReadLine();
}
}
Bu program ff saysnn onluk dzendeki karl olan 255 saysn ekrana iki kere yazacaktr.
Bitsel Kaydrma Operatrleri
Bu operatrler (<< ve >>) saylarn bitlerini istenildii kadar kaydrmak iin kullanlr. <<
saylar sola kaydrrken, >> saa kaydrr. rnek:
usingSystem;
classOperatorler
{
staticvoidMain()
{
byteb=100;//01100100
bytec=(byte)(b<<1);//bbirkezsolakaydrldve11001000oldu.(200oldu.)
byted=50;//00110010
bytee=(byte)(d>>2);//dikikezsaakaydrldve00001100oldu.(12oldu.)
Console.Write(c+""+e);
Console.ReadLine();
}
}
Sol tarafta kesinlikle yalnzca bir tane deiken olmal. rnein aadaki gibi bir
kullanm hataldr.
usingSystem;
classOperatorler
{
staticvoidMain()
{
19
byteb=7,a=1,c;
c=a=b;
Console.Write(a+""+b+""+c);
Console.ReadLine();
}
}
Bu program ekrana yan yana tane 7 yazacaktr. c=a=b; satrnda nce b a'ya atanr ve a=b
ifadesi 7 deerini tutar. nk a=b atamasnda 7 says atanmtr. Sonra a=b ifadesinin
tuttuu 7 says c'ye atanr. Sonunda deikenin deeri de 7 olur. Ancak u rnek hataldr:
usingSystem;
classOperatorler
{
staticvoidMain()
{
byteb=7,a=1,c;
(c=a)=b;
Console.Write(a+""+b+""+c);
Console.ReadLine();
}
}
Burada nce a c'ye atanyor ve c=a ifadesi 1 deeri tutuyor ve ifademiz 1=b ifadesine
dnyor. Atama operatrnn prensibine gre byle bir ifade hatal olduu iin program
derlenmeyecektir.
20
Bir de ilemli atama operatrleri vardr. Aslnda bunlar = operatrnn yapt ii daha ksa
kodla yaparlar:
21
BLM4
AKI KONTROL MEKANZMALARI
Koulfadeleri
ifDeyimi
switchDeyimi
DngYaplar
forDngs
whileDngs
dowhileDngs
foreachDngs
AtlamaDeyimleri
breakAnahtarSzc
continueAnahtarSzc
gotoAnahtarSzc
Koul fadeleri
if else
if else deyimi sayesinde belli bir koul salandnda sz konusu komutlar altrlr,
o belli koullar salanmadnda altrlmaz ya da baka komutlar altrlr. Kullanl u
ekildedir:
if(koul)
komut1;
else
komut2;
veya
if(koul)
{
komutlar1
}
else
{
komutlar2
}
22
{
staticvoidMain()
{
inta=5,b=7;
if(a<b)
Console.Write("ab'denkk");
else
Console.Write("ab'denkkdeil");
Console.ReadLine();
}
}
Sonu:ab'denkk
rnek:
usingSystem;
classAkisKontrolMekanizmalari
{
staticvoidMain()
{
inta=5,b=7;
if(a<b)
{
Console.WriteLine("ab'denkk");
Console.Write(a);
}
else
{
Console.WriteLine("ab'denkkdeil");
Console.Write(b);
}
Console.ReadLine();
}
}
Sonu:ab'denkk5
if else yaplarnda else ksmnn bulunmas zorunlu deildir. Bu durumda sadece koul
salandnda bir eyler yaplacak, koul salanmadnda bir eyler yaplmayacaktr.
rnek:
usingSystem;
classAkisKontrolMekanizmalari
{
staticvoidMain()
{
inta=5,b=7;
if(a<b)
Console.WriteLine("ab'denkk");
Console.ReadLine();
}
}
23
usingSystem;
classAkisKontrolMekanizmalari
{
staticvoidMain()
{
Console.Write("Cinsiyetinizigirin(e,k):");
charcins=Convert.ToChar(Console.ReadLine());
if(cins=='e')
Console.Write("Erkeksiniz");
elseif(cins=='k')
Console.Write("Kzsnz");
else
Console.Write("Ltfencinsiyetinizidorugiriniz!");
Console.ReadLine();
}
}
Bu program kullancdan cinsiyetini girmesi istemekte, eer kullancnn girdii harf e ise
ekrana Erkeksiniz yazmakta, eer girdii harf e deilse ise bu sefer kullancnn girdii
harfi k m deil mi diye incelemekte, eer k girmise ekrana Kzsnz yazmakta, bunlarn
dnda bir harf girdiinde de ekrana Ltfen cinsiyetinizi doru giriniz! yazmaktadr. Bu
ekilde bu bloklar daha da uzatlabilir. Yani else if satrnn bir tane olmas zorunlu deildir.
Ancak tabii ki else satrnn yalnzca bir tane olmas gerekir. C# i ie if else kullanlmasna
izin verir:
if(koul1)
{
if(koul2)
komut1;
else
{
komut2;
komut3;
}
}
else
komut4;
switch
switch deyimi baz if else deyimlerinin yapt ii daha az kodla yapar. Genellikle baz
karmak if else bloklarn kurmaktansa switch'i kullanmak programn anlalrln artrr.
Ancak tabii ki basit if else bloklarnda bu komutun kullanlmas gereksizdir. Kuruluu:
switch(ifade)
{
case sabit1:
komut1;break;
case sabit2:
komut2;break;
default:
komut3;break;
}
24
fadenin rettii deer hangi case sabitinde varsa o "case"deki komutlar iletilir. Eer
ifadenin rettii deer hibir case sabitinde yoksa default casedeki komutlar iletilir.
Ayn birden fazla case sabiti olamaz. rnein:
usingSystem;
classAkisKontrolMekanizmalari
{
staticvoidMain()
{
inta=4;
switch(a)
{
case4:
Console.Write("deneme1");
break;
case4:
Console.Write("deneme2");
break;
case5:
Console.Write("deneme3");
break;
default:
Console.Write("deneme4");
break;
}
}
}
Bu program hataldr.
C#'ta herhangi bir case'e ait komutlarn break; satr ile sonlandrlmas
gerekmektedir.Eer break; satr ile sonlandrlmazsa programmz hata verir. rnein
aadaki program hata vermez:
usingSystem;
classAkisKontrolMekanizmalari
{
staticvoidMain()
{
inta=4;
switch(a)
{
case4:
stringb=Console.ReadLine();
Console.Write(b);
break;
default:
Console.Write("deneme4");
break;
}
}
}
25
inta=4;
switch(a)
{
case4:
stringb=Console.ReadLine();
Console.Write(b);
default:
Console.Write("deneme4");
break;
}
}
}
Eer programmzn bir case'deyken farkl bir case'e gitmesini istiyorsak goto anahtar
szcn kullanrz. rnek:
usingSystem;
classAkisKontrolMekanizmalari
{
staticvoidMain()
{
inta=5;
switch(a)
{
case4:
stringb=Console.ReadLine();
Console.Write(b);
break;
case5:
Console.Write("imdicase4'egideceksiniz.");
gotocase4;
default:
Console.Write("deneme4");
break;
}
Console.ReadLine();
}
}
26
Dng Yaplar
for Dngs
Eer programda -belli koullar salad srece- birden fazla altrlmasn istediimiz
kodlar varsa dngler kullanlr. C#'ta en ok kullanlan dng "for"dur.
Kullanm:
for(ifade1;kosul;ifade2)
komut;
veya
for(ifade1;kosul;ifade2)
{
komut1;
komut2;
.
.
.
}
27
1) ifade1 altrlr.
2) Koula baklr. Eer koul salanyorsa;
2.1) kme parantezleri iindeki ya da kme parantezleri yoksa kendinden sonra gelen
ilk satrdaki komut altrlr.
2.2) ifade2 altrlr.
2.3) 2. adma dnlr.
3) Eer koul salanmyorsa kme parantezleri dna ya da -kme parantezleri yoksakendinden sonra gelen ilk satrdaki komuttan hemen sonraki satra klr. Dolaysyla
dngden klm olur.
rnek:
usingSystem;
classAkisKontrolMekanizmalari
{
staticvoidMain()
{
inttoplam=0;
for(inti=1;i<=3;i++)
toplam+=i;
Console.Write("toplam={0}",toplam);
Console.ReadLine();
}
}
Bu program 1'den 3'e kadar olan tam saylar (1 ve 3 dhil) toplayp toplam ekrana
yazacaktr.
Faktriyel rnei:
usingSystem;
classAkisKontrolMekanizmalari
{
staticvoidMain()
{
floats;
intsi,f;
boola=true;
for(;a;)
{
Console.Write("Ltfenfaktoriyelininalnmasnistediinizsayygirin:");
s=Convert.ToSingle(Console.ReadLine());
si=(int)s;
if(si!=s||s<1)
{
Console.WriteLine("Ltfenpozitiftamsaygirin.");
a=true;
}
else
{
a=false;
for(f=1;si>1;si)
f*=si;
Console.Write("Faktriyeli={0}",f);
}
Console.ReadLine();
}
}
}
28
Kurallar:
for dngsnn parantezleri iindeki "for(int i=0;i<5;i++)" iki ifade ve bir koulun
istenirse birtanesi, istenirse bazlar, istenirse de tamam bo braklabilir; ancak noktal
virgller mutlaka yazlmaldr.
Tahmin edebileceiniz gibi for dngsnn iinde veya "for(int i=0;i<5;i++)" ksmnda
tanmlanan herhangi bir deiken dngnn dnda kullanlamaz. Bir deikeni
dngnn dnda kullanabilmemiz iin o deikenin dngden nce tanmlanp ilk deer
verilmesi ve deikeni kullanacamz yerde de faaliyet alannn devam etmesi
gerekmektedir. Bu btn dngler ve koul yaplar iin geerlidir. rnein:
usingSystem;
classAkisKontrolMekanizmalari
{
staticvoidMain()
{
inta=0;
for(inti=0;i<1;i++)
a=5;
Console.Write(a);
}
}
29
RNEKLER:
rnek 1 :
Kullancnn ad ve bir say klavyeden girilerek, girilen say kadar ekrana kullancnn adn
yazan konsol programn yapnz.
usingSystem;
classfordongusu
{
staticvoidMain()
{
stringad;
intadet=0;
Console.Write("Adnzgiriniz:");
ad=Console.ReadLine();
Console.Write("Kakeretekrarlansn:");
adet=Convert.ToInt32(Console.ReadLine());
for(inti=0;i<adet;i++)
{
Console.WriteLine(ad);
}
Console.ReadLine();
}
}
rnek 2 :
2+5+8+11+14+17+20+23+26+29+32+35.+50 eklindeki matematiksel serinin toplamn
bulup, ekrana yazan konsol programn yapnz.
usingSystem;
classfordongusu
{
staticvoidMain()
{
inttoplam=0;
for(inti=2;i<=50;i+=3)
{
toplam+=i;
}
Console.Write("Toplam="+toplam);
Console.ReadLine();
}
}
rnek 3 :
Klavyeden 10 adet say girilerek, bu saylardan ift olanlarn toplamn bulup, ekrana yazan
konsol programn yapnz.
usingSystem;
classfordongusu
{
staticvoidMain()
{
intsayi=0,toplam=0;
for(inti=1;i<=10;i++)
{
Console.Write("{0}Sayygiriniz:",i);
sayi=Convert.ToInt32(Console.ReadLine());
if(sayi%2==0)
{
toplam+=sayi;
}
30
}
Console.Write("iftSaylarnToplam:"+toplam);
Console.ReadLine();
}
}
rnek 4 :
1 + 2 + 3 + 4 + 5 + . 10 eklindeki matematiksel serinin toplamn bulup ekrana
yazan konsol uygulamasn yapnz.
usingSystem;
classfordongusu
{
staticvoidMain()
{
inttoplam=0;
for(inti=1;i<=10;i++)
{
toplam+=i;
}
Console.Write("Toplam="+toplam);
Console.ReadLine();
}
}
rnek 5 :
*
**
***
****
*****
******
Yukarda grld gibi bir ekran kts veren consol programn yapnz. NOT: Program
dngkullanlarak yaplacaktr.
usingSystem;
classfordongusu
{
staticvoidMain()
{
for(inti=1;i<=6;i++)
{
for(intk=1;k<=i;k++)
{
Console.Write("*");
}
Console.WriteLine();
}
Console.ReadLine();
}
}
31
rnek 6 :
Klavyeden girilen 5 adet saydan ka tanesinin negatif olduunu bulan konsol programn
yapnz.
usingSystem;
classfordongusu
{
staticvoidMain()
{
intsayilar=0,adet=0;
for(inti=1;i<6;i++)
{
Console.Write("{0}Sayygiriniz:",i);
sayilar=Convert.ToInt32(Console.ReadLine());
if(sayilar<0)
{
adet++;
}
}
Console.Write("{0}Adetsaynegatif",adet);
Console.ReadLine();
}
}
while Dngs
alma Prensibi
while(koul)
{
komut1;
komut2;
.
.
.
}
1) Koula baklr. Eer koul salanyorsa;
1.1) kme parantezleri iindeki ya da -kme parantezleri yoksa- kendinden sonra gelen ilk
satrdaki komut altrlr.
32
kouldan
oluan
hlidir.
do while Dngs
imdiye kadar grdmz dnglerde nce koula baklyor, eer koul salanrsa dng
iindeki komutlar altrlyordu. Ancak bazen dngdeki komutlarn koul salanmasa da en
az bir kez altrlmasn isteyebiliriz. Bu gibi durumlar iin C#'ta do while dngs vardr.
do
komut;
while(koul)
veya
do
{
komut1;
komut2;
.
.
.
}while(koul)
alma Prensibi
do
{
komut1;
komut2;
.
.
.
}while(koul)
foreach Dngs
C#ta foreach dngs bir dizi belirten ifadenin veya bir koleksiyonun her eleman iin
yapsndaki kodlar altran dngdr.
foreach (int a in dizi)
{
Console.WriteLine(a);
}
33
Atlama Deyimleri
break Anahtar Szc
Hatrlarsanz break komutunu switch'teki case'lerden kmak iin kullanmtk. Benzer ekilde
break komutu btn dnglerden kmak iin kullanlabilir. rnek:
usingSystem;
classAkisKontrolMekanizmalari
{
staticvoidMain()
{
for(chara;;)
{
a=Convert.ToChar(Console.ReadLine());
if(a=='q')
break;
}
}
}
break szcne benzer. Ancak break szcnden farkl olarak program continue'u
grdnde dngden kmaz, sadece dngnn o anki iterasyonu sonlanr. rnek:
usingSystem;
classAkisKontrolMekanizmalari
{
staticvoidMain()
{
for(inta=0;a<51;a++)
{
if(a%2==1)
continue;
Console.WriteLine(a);
}
Console.ReadLine();
}
}
Bu program 0'dan 50'ye kadar (0 ve 50 dhil) olan ift saylar ekrana alt alta yazmaktadr.
goto Anahtar Szc
34
gotoucuncu;
ikinci:
Console.WriteLine("kinciblm");
ucuncu:
Console.WriteLine("ncblm");
Console.ReadLine();
}
}
rnek 2 :
Girilen pozitif herhangi bir tam sayy ikilik dzene eviren program yaznz.
usingSystem;
classAkisKontrolMekanizmalari
{
staticvoidMain()
{
stringmod="";
Console.Write("Ltfenikiliksistemedntrlmesiniistediinizsaynzgirin:");
floata=Convert.ToSingle(Console.ReadLine());
intb=(int)a;
if(a<=0||a!=b)
mod="Birpozitiftamsaygirmediiniziinsaynzikiliksisteme
dntrlmedi!";
else
for(;b>0;b/=2)
mod=b%2+mod;
Console.Write(mod);
Console.ReadLine();
}
}
35
rnek 3 :
Konsol ekranna girilen 0 ile 100 (snrlar dhil) arasndaki 10 notun en byn, en
kn ve ortalamasn yazan program yaznz.
usingSystem;
classAkisKontrolMekanizmalari
{
staticvoidMain()
{
intbs=0,toplam=0,ks=0;
for(inta=0,b;a<10;a++)
{
Console.Write(a+1+".notugiriniz:");
b=Convert.ToInt32(Console.ReadLine());
if(b>100||b<0)
{
Console.Write("Yanlnotgirdiniz.Ltfentekrar");
a;
continue;
}
if(a==0)
{
bs=b;
ks=b;
}
else
{
if(b>bs)
bs=b;
if(b<ks)
ks=b;
}
toplam+=b;
}
Console.Write("Enbyk:{0}\nEnkk:{1}\nOrtalama:"+toplam/10,bs,ks);
Console.ReadLine();
}
}
BLM5
DZLER
Yeil Blge:
36
nce veri hangi tipte olacaksa o belirtilir. Unutmayalm bir dizide sadece ayn tipte veri
olabilir. Sonra bu veri tipinin bir dizi olduunu belirtmek iin keli parantez konulur.
Sar Blge:
Atama operatrnden sonra "new" yazyoruz. Bylece yeni bir dizi tanmlamas yaplaca
bildiriliyor.
Turkuaz Blge:
Veri tipinin adn yazdktan sonra keli parantez iinde dizi eleman saysn yazyoruz.
Bylece bellek zerinde dizi yaplanmas salanyor.
rnek:
Bu ekilde dizi tanmlamas yaptktan sonra artk dizi elemanlarn altta grld gibi
belirlemek gerekir.
37
rnek 1:
38
RNEKLER
rnek 1:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceConsoleApplication1
{
classProgram
{
staticvoidMain(string[]args)
{
string[]gunler={"Pazartesi","Sal","aramba","Perembe","Cuma","Cumartesi",
"Pazar"};
stringgun=gunler[3];
Console.WriteLine(gun);
Console.ReadLine();
}
}
}
Alttaki rnekte ise deikene falan atama yapmadan dorudan yazdrma komutunun iine
"gunler[3]" yazarak ekrana yazdrma ilemi yapld.
rnek 2:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceConsoleApplication1
{
classProgram
{
staticvoidMain(string[]args)
{
string[]gunler={"Pazartesi","Sal","aramba","Perembe","Cuma","Cumartesi",
"Pazar"};
Console.WriteLine(gunler[3]);
Console.ReadLine();
}
}
}
39
rnek:
int[,] tablo = new int[3, 4];
Yukardaki rnei biraz daha ayrntl grelim.
Keli parantez iindeki ilk deer satr deerini gstermektedir. Altta grld gibi "3" adet
satr olumaktadr.
Buna gre;
Birinci satr indis no : [0]
kinci satr indis no : [1]
nc satr indis no : [2]
40
Keli parantez iindeki ikinci deer stun deerini gstermektedir. Altta grld gibi "4"
adet stun olumaktadr.
Buna gre;
Birinci stun indis no
: [0]
kinci stun indis no
: [1]
nc stun indis no : [2]
Drdnc stun indis no: [3]
imdi bu satr ve stunlar birletirdiimizde alttaki yapy elde ederiz. Buna gre her
karedeki krmz rakamlar satr deerlerini gstermekte mavi rakamlar stun deerlerini
gstermektedir.
Yukardaki tabloya gre altta grld gibi her kare iin bir deer belirledim.
int[,] tablo = new int[3, 4];
41
tablo[0,0] = 1;
tablo[0,1] = 2;
tablo[0,2] = 3;
tablo[0,3] = 4;
tablo[1,0] = 5;
tablo[1,1] = 6;
tablo[1,2] = 7;
tablo[1,3] = 8;
tablo[2,0] = 9;
tablo[2,1] = 10;
tablo[2,2] = 11;
tablo[2,3] = 12;
Yukardaki "tablo" adl dizinin grnm alttaki gibi olacaktr.
42
RNEKLER
rnek 1:
Kullancnn girdii kelimenin harflerini alfabetik sralayan c# console uygulamasn yaznz
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceConsoleApplication1
{
classProgram
{
staticvoidMain(string[]args)
{
Console.Write("BirKelimeGiriniz=");
stringisim=Convert.ToString(Console.ReadLine());
intuzunluk=isim.Length;
char[]dizi=newchar[uzunluk];
stringsirali="AlfebetikSraleDizilii=";
for(inti=0;i<uzunluk;i++)
{
dizi[i]=isim[i];
}
Array.Sort(dizi);
for(inti=0;i<uzunluk;i++)
{
sirali+=dizi[i];
}
Console.WriteLine(sirali);
Console.ReadLine();
}
}
}
rnek 2:
Dardan girilen dizinin dizi elemann gsteren program yaznz
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceConsoleApplication1
{
classProgram
{
staticvoidMain(string[]args)
{
int[]dizi=newint[10];
for(inti=0;i<10;i++)
{
Console.Write("{0}.SayyGiriniz=",i);
dizi[i]=Convert.ToInt32(Console.ReadLine());
}
Console.WriteLine("xxxxxxxxxxxxx");
for(inti=9;i>0;i)
{
Console.WriteLine("Dizinin{0}Eleman={1}",i,dizi[i]);
}
Console.WriteLine("xxxxxxxxxxxxx");
Console.Write("Kancelemangrmekistiyorsunuz=");
intsayi=Convert.ToInt32(Console.ReadLine());
43
Console.WriteLine("{0}.eleman={1}",sayi,dizi[sayi]);
Console.ReadLine();
}
}
}
rnek 3:
Verilen bir string dizisini, ters srada (sondan baa doru) listeleyen C# programn yaznz.
usingSystem;
classDiziListele
{
publicstaticvoidMain(string[]args)
{
string[]strDizi={"Ali","Zekiye","Cemil","Kemal"};
intson=strDizi.Length1;
for(inti=son;i>=0;i)
{
Console.WriteLine(strDizi[i]);
}
Console.ReadLine();
}
}
rnek 4:
Kullancnn girdii 5 adet sayy bir diziye atayarak, bu dizide bulunan ift saylarn
ortalamasn ekrana yazan konsol uygulamasn yapnz.
usingSystem;
classDiziArama
{
staticvoidMain(string[]args)
{
intadet=0,toplam=0;
int[]sayi=newint[5];
for(intk=0;k<5;k++)
{
Console.Write("{0}.sayygiriniz:",k);
sayi[k]=int.Parse(Console.ReadLine());
}
for(intk=0;k<5;k++)
{
if(sayi[k]%2==0)
{
adet++;
toplam+=sayi[k];
}
}
Console.WriteLine("Ortalamas={0}",toplam/adet);
Console.ReadKey();
}
}
BLM6
METOTLAR VE FONKSYONLAR
u ana kadar yaptmz rneklerde hep nceden hazrlanm ReadLine(), WriteLine() vb.
gibi metotlar kullandk. Aslnda btn rneklerimizde birer metot oluturutuk. O da
44
alabilir her programda bulunmas gereken Main metoduydu. Artk Main metodu gibi baka
metotlar oluturup programmzn iinde kullanabileceiz. Metotlar oluturarak programmz
paralara bler ve programmzn karmakln azaltrz. Ayrca baz kodlar bir metot iine
alp ayn kodlara ihtiyacmz olduunda bu metodu arabiliriz.
Bu metot, iki tane int trnden girdi alr ve bu girdilerin toplamn int trnden tutar. Ancak
bu metodu programmz iinde kullanabilmemiz iin bu metodun iinde bulunduu snf
trnden bir nesne oluturup "." operatryle bu nesne zerinden metodumuza erimeliyiz.
rnek:
usingSystem;
class Metotlar
{
int Topla(int a,int b)
{
return a+b;
}
staticvoid Main()
{
Metotlar nesne=new Metotlar();
int a=nesne.Topla(2,5);
Console.Write(a);
}
}
static olarak tanmlanan metotlara erimek iin metodun iinde bulunduu snf trnden bir
nesne oluturmaya gerek yoktur. static olarak tanmlanan metotlara sadece metodun adn
yazarak eriilebilir.
rnek:
usingSystem;
class Metotlar
{
staticint Topla(int a,int b)
{
return a+b;
}
staticvoid Main()
{
int a=Topla(2,5);
45
Console.Write(a);
}
}
Btn programlarda nce Main metodu alr. Dier metotlar Main metodunun iinden
arlmadka almaz.
Eer metot, iinde bulunduumuz snfta deil de, baka bir snf iinde oluturulmusa o
metodu kullanabilmek iin nce snf yazmamz gerekir.
rnek:
usingSystem;
class Metotlar1
{
publicstaticint Topla(int a,int b)
{
return a+b;
}
}
class Metotlar2
{
staticvoid Main()
{
int a=Metotlar1.Topla(2,5);
Console.Write(a);
}
}
Dikkat ettiyseniz bu metodun oluturulma satrnn (4. satr) bana public anahtar szc
konmu. public szcyle derleyiciye bu metoda her snftan eriilebileceini sylyoruz.
Eer public szc yazlmam olsayd bu metoda sadece Metotlar1 snfndan eriilebilirdi.
imdi de static olmayan bir metodu baka bir snf iinde oluturalm ve kullanalm:
usingSystem;
class Metotlar1
{
publicint Topla(int a,int b)
{
return a+b;
}
}
class Metotlar2
{
staticvoid Main()
{
Metotlar1 nesne=new Metotlar1();
int a=nesne.Topla(3,9);
Console.Write(a);
}
}
46
Btn deer tutan metotlar bir deermi gibi kullanlabilir, ancak deikenmi gibi
kullanlamaz.
Herhangi bir deer tutmayan (WriteLine gibi) metotlar void anahtar szcyle
olutururuz.
rnek:
usingSystem;
class Metotlar1
{
staticvoid Yaz(object a,int b)
{
for(;b>0;b--)
Console.Write(a);
}
staticvoid Main()
{
Yaz("deneme",5);
}
}
Burada oluturduumuz Yaz metodu ald ilk parametreyi ikinci parametre kere ekrana
yazar. rnein programmzda "deneme" stringi ekrana 5 kez yazdrlyor.
Herhangi bir deer tutmayan metotlarda return; komutu, yanna herhangi bir ifade olmadan
kullanlabilir. Aslnda return; komutunun asl grevi metottan kmaktr, ancak yanna baz
ifadeler koyularak metodun tuttuu deeri belirtme vazifesi de grr. rnein bir if koulu
oluturup, eer koul salanrsa metottan klmasn, koul salanmazsa baka komutlar da
altrlmasn
salayabiliriz.
Ancak
doal
olarak
bir
metodun
son
satrnda return; komutunun kullanlmas gereksizdir. rnek kullanm:
usingSystem;
class Metotlar1
{
staticvoid Yaz(object a,int b)
{
if(b>10)
return;
for(;b>0;b--)
Console.Write(a);
}
staticvoid Main()
{
Yaz('n',10);
}
}
Bu programda eer metoda verilen ikinci parametre 10'dan bykse metottan hibir ey
yaplmadan klyor.
47
rnek program:
usingSystem;
class Metotlar1
{
staticvoid Yaz()
{
Console.Write("deneme");
}
staticvoid Main()
{
Yaz();
}
}
48
Buradaki ekrana "deneme" yazan metot herhangi bir parametre almaz. Dolaysyla da
programda kullanrken de parantezlerin iine hibir ey yazlmaz.
Bir metodun iinde baka bir metot oluturulamaz. rnein aadaki gibi bir kullanm
hataldr:
usingSystem;
class Metotlar1
{
staticvoid Yaz()
{
Console.Write("deneme");
staticvoid Ciz()
{
Console.Write("\n");
}
}
staticvoid Main()
{
Yaz();
}
}
Metot oluturulurkenki metot parantezinde "static void Yaz(object a,int b)" veya metot
kme parantezlerinin iinde tanmlanan deikenler metottan kldnda bellekten
silinirler. Eer ayn metot tekrar arlrsa sz konusu deikenler tekrar tanmlanp tekrar
deerler atanr.
Metot oluturulurkenki metot parantezindeki deikenlerin trleri tek tek belirtilmelidir.
Virgl ile ortak tr belirtimi yaplamaz. Yani static void Ornek(int a,int b) yerine static
void Ornek(int a, b) yazlamaz.
Buradaki Yaz metodu kendisine parametre olarak verilen dizinin elemanlarn alt alta yazd.
Eer yalnzca int[ ] trndeki deil btn trlerdeki dizileri ekrana yazan bir metot yazmak
istiyorsak:
usingSystem;
49
class Metotlar1
{
staticvoid Yaz(Array dizi)
{
foreach(object i in dizi)
Console.WriteLine(i);
}
staticvoid Main()
{
int[] dizi={1,2,4,7,9};
Yaz(dizi);
}
}
50
Degistir(dizi);
Yaz(dizi);
}
}
2.
usingSystem;
class Metotlar1
{
staticvoid Degistir(int sayi)
{
sayi=10;
}
staticvoid Yaz(int sayi)
{
Console.WriteLine(sayi);
}
staticvoid Main()
{
int sayi=1;
Degistir(sayi);
Yaz(sayi);
}
}
51
Metotlarn Ar Yklenmesi
C#'ta parametre says ve/veya parametrelerin trleri farkl olmak artyla ayn isimli birden
fazla metot oluturulabilir. Buna metotlarn ar yklenmesi denir.
C#, bir metot arldnda ve arlanla ayn isimli birden fazla metot bulunduunda
metodun arl biimine bakar. Yani ana programdaki metoda girilen parametrelerle
oluturulmu olan metotlarn parametrelerini kyaslar. nce parametre saysna bakar. Eer
ayn isimli ve ayn sayda parametreli birden fazla metot varsa bu sefer parametre trlerinde
tam uyumluluk arar, parametre trlerinin tam uyumlu olduu bir metot bulamazsa bilinsiz
tr dnmnn mmkn olduu bir metot arar, onu da bulamazsa programmz hata verir.
rnekler:
usingSystem;
class Metotlar
{
staticvoid Metot1(int x,int y)
{
Console.WriteLine("1. metot arld.");
}
staticvoid Metot1(float x,float y)
{
Console.WriteLine("2. metot arld.");
}
staticvoid Metot1(string x,string y)
{
Console.WriteLine("3. metot arld.");
}
staticvoid Main()
{
Metot1("deneme","deneme");
Metot1(5,6);
Metot1(10f,56f);
}
}
52
usingSystem;
class Metotlar
{
staticvoid Metot1(float x,float y)
{
Console.WriteLine("1. metot arld.");
}
staticvoid Metot1(double x,double y)
{
Console.WriteLine("2. metot arld.");
}
staticvoid Main()
{
Metot1(5,6);
}
}
Bu programda iki metodun da parametre says eit, iki metotta da tam tr uyumu yok ve iki
metotta da bilinsiz tr dnm mmkn. Bu durumda en az kapasiteli trl metot arlr.
Yani bu programda birinci metot arlr.
Baka bir rnek:
usingSystem;
class Metotlar
{
staticvoid Metot1(float x,float y)
{
Console.WriteLine("1. metot arld.");
}
staticvoid Metot1(int x,int y)
{
Console.WriteLine("2. metot arld.");
}
staticvoid Main()
{
Metot1(5,6.4f);
}
}
53
Bu durumda ikinci metot arlr. nk char hem inte hem de floata bilinsiz olarak
dnebilir. Ancak int daha az kapasitelidir.
NOT: Metotlarn geri dn tipi (tuttuu deerin tipi) faydalanlabilecek ayrt edici
zelliklerden deildir. Yani iki metodun parametre says ve parametre trleri ayn ise tuttuu
deer tipleri farkl olsa bile bunlarn herhangi biri arlmak istendiinde programmz
derlenmeyecektir.
usingSystem;
class Metotlar
{
staticvoid Metot1(int x,int y,int z)
{
Console.WriteLine("1. metot arld.");
}
staticvoid Metot1(int x,int y)
{
Console.WriteLine("2. metot arld.");
}
staticvoid Metot1(float x,int y)
{
Console.WriteLine("3. metot arld.");
}
staticvoid Main()
{
Metot1(3,3,6);
Metot1(3.4f,3);
Metot1(1,'h');
}
}
54
Burada ald parametrelerin toplamn tutan bir metot yazdk. Eer metoda hi parametre
girilmemise 0 deerini dndrmektedir. Grdnz gibi params anahtar szcyle girilen
tm parametreleri int[] trndeki sayilar dizisine aktardk ve bu diziyi metotta gnlmzce
kullandk. Bir de bu programmzda Length zelliini grdnz. zellikler metotlara
benzerler, metotlardan tek farklar "( )" ksmlar olmamasdr. Dolaysyla parametre
almazlar. rneimizde sayilar.Length satr sayilar dizisinin eleman saysn int trnden
tutar.
Baka bir rnek:
usingSystem;
class Metotlar
{
staticint Islem(string a,paramsint[] sayilar)
{
if(a=="carp")
{
if(sayilar.Length==0)
return1;
int carpim=1;
foreach(int i in sayilar)
carpim*=i;
return carpim;
}
elseif(a=="topla")
{
if(sayilar.Length==0)
55
return0;
int toplam=0;
foreach(int i in sayilar)
toplam+=i;
return toplam;
}
else
return0;
}
staticvoid Main()
{
Console.WriteLine(Islem("topla",3,4,7,8));
Console.WriteLine(Islem("carp",5,23,6));
}
}
Bu programdaki gibi metodumuzda deiken parametre yannda bir ya da daha fazla normal
sabit parametre de olabilir. Ancak deiken parametre mutlaka en sonda yazlmaldr.
NOT: Deer dndren metotlarmz mutlaka her durumda deer dndrmelidir. rnein
metodumuzda sondaki else kullanlmazsa programmz derlenmez. nk else'i
kullanmasaydk birinci parametre yalnzca "carp" veya "topla" olduunda metodumuz bir
deer dndrecekti. Ve bu da C# kurallarna aykr.
NOT: Deiken sayda parametre alan metotlar ar yklenmi metotlar olduunda
deerlendirilmeye alnmaz.
rnek:
usingSystem;
class Metotlar
{
staticvoid Metot1(int x,int y)
{
Console.WriteLine("1. metot arld.");
}
staticvoid Metot1(int x,paramsint[] y)
{
Console.WriteLine("2. metot arld.");
}
staticvoid Main()
{
Metot1(3,6);
}
}
56
staticvoid Main()
{
Metot1(3,6,8);
}
}
57
}
staticvoid Main()
{
float x=10;
Console.WriteLine(Fonksiyon(x));
Console.WriteLine(TersFonksiyon(x));
Console.WriteLine(Fonksiyon(TersFonksiyon(x)));
}
}
Bu program ekrana srasyla 25, 2.5 ve 10 yazacaktr. Eer ortada bir blme ilemi varsa ve
matematiksel ilemler yapmak istiyorsak deikenler int trnden deil, float ya da double
trnden olmaldr. nk int tr ondalk ksm almaz, dolaysyla da int tryle yaplan
blme ilemlerinde hatal sonular kabilir. nk rnein 2 says 2.5 saysna eit deildir.
Main Metodu
Bildiiniz gibi alabilir her programda Main metodunun bulunmas gerekiyor. Btn
programlarda nce Main metodu altrlr. Dier metotlar Main metodunun iinden
arlmadka almaz. Bu zellikler dnda Main metodunun dier metotlardan baka
hibir fark yoktur. Ancak imdiye kadar Main metodunu yalnzca static void Main() eklinde
yarattk. Yani herhangi bir parametre almad ve herhangi bir deer tutmad. Ancak Main
metodunun bir deer tutmasn veya parametre almasn salayabiliriz.
Burada komut satrndan girilen argmanlar string[] trndeki args dizisine aktarlyor. Bu
diziyi programmzda gnlmzce kullanabiliriz. rnein programmz deneme.exe olsun.
Komut satrndan
deneme aye bekir rabia
girilirse ilk szck olan deneme ile programmz altrlr ve aye, bekir ve rabia szckleri
de string[] trndeki args dizisine aktarlr.
58
Bu program komut satrndan girilen argmanlar ekrana alt alta yazacaktr. Komut satrnda
program adndan sonra girilen ilk szck args dizisinin 0. indeksine, ikinci szck 1.
indeksine, nc szck 2. indeksine vs. aktarlr.
59
BLM7
SINIFLAR
Snflar nesne ynelimli programlamann en nemli gesidir. Snflar sayesinde
programlarmz paralara blp karmakln azaltrz.
C#'ta metotlar ve zellikler mutlaka bir snfn iinde olmaldr. Metotlar bir veya daha fazla
komutun bir araya getirilmi halidir; parametre alabilirler, geriye deer dndrebilirler.
zellikler ise bellek gzeneklerinin programlamadaki karlklardr. Bu bakmdan zellikler
deikenlere benzerler. Aradaki en temel fark deikenlerin bir metot iinde tanmlanp
yalnzca tanmland metot iinde etkinlik gsterebilmesine ramen zelliklerin tpk
metotlar gibi bir ye eleman olmasdr. Bu bakmdan zelliklerin tuttuu deerlere daha fazla
yerden eriilebilir.
Snf Oluturmak
zellii ve iki metodu olan rnek bir snf oluturulmas:
usingSystem;
class SinifIsmi
{
publicint ozellik1;
privatestring ozellik2;
float ozellik3;
publicint metot1(int a,int b)
{
return a+b;
}
privatevoid metot2(string a)
{
Console.WriteLine(a);
}
}
Burada dikkatinizi public ve private anahtar szckleri ekmi olmal. Bir metot ya da
zellie bulunduu snfn dndan da eriilebilmesini istiyorsak public szc
kullanlr.private szc kullanmakla hibir ey yazmamak ayn etkiye sahiptir ve iki
durumda da metot ya da zellie yalnzca bulunduu snfn iinden eriilebilir. Bu snftaki
yalnzca ozellik1zelliine ve metot1 metoduna SinifIsmi snfnn dndan eriilebilir. Dier
zellik ve metotlara eriilemez. imdi bu snf programmzda kullanalm:
usingSystem;
class SinifIsmi
{
publicint ozellik1;
publicstring ozellik2;
publicfloat ozellik3;
publicint metot1(int a,int b)
{
return a+b;
}
60
publicvoid metot2(string a)
{
Console.WriteLine(a);
}
}
class EsasSinif
{
staticvoid Main()
{
SinifIsmi nesne=new SinifIsmi();
Console.WriteLine(nesne.ozellik1);
Console.WriteLine(nesne.ozellik2);
Console.WriteLine(nesne.ozellik3);
Console.WriteLine(nesne.metot1(2,5));
nesne.metot2("deneme");
}
}
Bu programda SinifIsmi snfndaki btn zellik ve metotlarn public anahtar szc ile
belirtildiine dikkat edin. Oluturduumuznesne nesnesiyle snfn btn zellik ve
metotlarna eritik. ozellik1, ozellik2 ve ozellik3 zelliklerine hibir deer atanmam, ancak
programmz hata vermedi, sadece derleme sonunda uyar verdi. nk SinifIsmi nesne=new
SinifIsmi(); satrndaki new anahtar szc sayesinde snftaki btn zellikler nesne nesnesi
iin
trlerine
gre
varsaylan
deere
atand.
Eer SinifIsmi
nesne=new
SinifIsmi(); yerine SinifIsmi nesne; yazsaydk programmz hata verirdi. Ayrca
programmzda metot2 metodu deer tutan deil, i yapan bir metot, o yzden tek bana
kullanld.
Baka bir rnek:
usingSystem;
class SinifIsmi
{
publicint ozellik1=55;
publicstring ozellik2="deneme";
publicfloat ozellik3=123.78f;
publicint metot1(int a,int b)
{
return a+b;
}
publicvoid metot2(string a)
{
Console.WriteLine(a);
}
}
class EsasSinif
{
staticvoid Main()
{
SinifIsmi nesne=new SinifIsmi();
Console.WriteLine(nesne.ozellik1);
Console.WriteLine(nesne.ozellik2);
Console.WriteLine(nesne.ozellik3);
61
Console.WriteLine(nesne.metot1(2,5));
nesne.metot2("Vikikitap");
}
}
Bu programda ise zelliklere nce deer verdik ve esas programda da bu deerler ekrana
yazld.
Burada KrediHesabi snf trnden hesap1 ve hesap2 adl iki nesne tanmland ve bu
nesnelerle KrediHesabi snfnn HesapNo zelliine eriildi. Burada bilmemiz gereken ey
farkl nesnelerle bir snfn zelliine eriip zelliin deerini deitirdiimizde aslnda
birbirinden farkl deikenlerin deerini deitirmi olmamzdr. Bu program ekrana alt alta
3456 ve 1111 yazacaktr. nk KrediHesabi hesap1=new KrediHesabi(); ve KrediHesabi
hesap2=new KrediHesabi(); satrlaryla birbirinden farkl iki nesne oluturduk ve bu iki nesne
iin bellekte ayr ayr alan tahsisat yaptk.
Eer program yle deitirirsek,
usingSystem;
class KrediHesabi
{
publiculong HesapNo;
}
class AnaSinif
{
staticvoid Main()
{
KrediHesabi hesap1=new KrediHesabi();
62
KrediHesabi hesap2=hesap1;
hesap1.HesapNo=3456;
hesap2.HesapNo=1111;
Console.WriteLine(hesap1.HesapNo);
Console.WriteLine(hesap2.HesapNo);
}
}
Bu
durumda
alt
alta
1111
ve
1111
yazlacaktr.
nk KrediHesabi
hesap2=hesap1; satryla KrediHesabi snf trnden yeni bir nesne oluturduk ancak bu
nesne iin bellekte ayr bir alan tahsisat yapmadk. Nesneyi hesap1 nesnesinin bellekteki
adresine
ynlendirdik.
Dolaysyla hesap1'in
zelliinde
yaplan
bir
deiiklik hesap2'yi, hesap2'nin zelliinde yaplan bir deiiklik de hesap1'i etkileyecektir.
Baka bir rnek program:
usingSystem;
class EsasSinif
{
int a;
staticvoid Main()
{
EsasSinif nesne=new EsasSinif();
Console.WriteLine(nesne.a);
}
}
Grdnz gibi zellik ve metot tanmlamalar iin ayr bir snf oluturmak zorunda deiliz.
Main() metodunun olduu snfa istediimiz ye elemanlar ekleyebiliriz. Bu durumda a
zelliine eriebilmek iin a zelliini public olarak belirtme zorunluluundan da kurtulmu
olduk.
NOT: Farkndaysanz imdiye kadar hibir metot ya da zelliimizi static anahtar szcyle
belirtmedik. static anahtar szcyle belirttiimiz metot ya da zellikleri direkt olarak sz
konusu metot ya da zelliin adn yazarak kullanabiliriz.
rnek:
usingSystem;
class EsasSinif
{
staticint a;
staticvoid Main()
{
Console.WriteLine(a);
}
}
Bu program ekrana 0 yazacaktr. Eer a'ya bir deer verseydik o deer yazacakt.
NOT: Diziler tpk deikenler gibi birbirine atanabilirler.
rnek:
int[] a={1,6,7,12};
int[] b=a;
63
Burada b dizisine a dizisi adres gsterme yoluyla aktarlmtr, dolaysyla da a dizisinin bir
elemannda yaplan bir deiiklik b dizisini, b dizisinin bir elemannda yaplan bir deiiklik a
dizisini etkileyecektir. nk diziler birbirlerine adres gsterme yoluyla atanr. Ayrca
aadaki gibi bir kullanm da dorudur:
int[] a={1,6,7,12};
int[] b={1,5};
b=a;
Burada b dizisi sahip olduu elemanlar kaybedip a dizisinin adresine ynlendi. Bu ve benzer
ekilde diziler birbirlerine atanabilir. Yani ayn adrese ynlendirilebilirler.
RNEKLER:
rnek 1:
Bu program bir metoda girilen iki parametreyi ve bunlarn arpmn ekrana yazar. Eer bir
dikdrtgen sz konusu olduunu dnrsek dikdrtgenin enini, boyunu ve alann ekrana
yazar.
usingSystem;
class Dortgen
{
publicint En;
publicint Boy;
publicint Alan()
{
int Alan=En*Boy;
return Alan;
}
publicvoid EnBoyBelirle(int en,int boy)
{
En=en;
Boy=boy;
}
publicvoid Yaz()
{
Console.WriteLine("***************");
Console.WriteLine("En:{0,5}",En);
Console.WriteLine("Boy:{0,5}",Boy);
Console.WriteLine("Alan:{0,5}",Alan());
Console.WriteLine("***************");
}
}
class AnaSinif
{
staticvoid Main()
{
Dortgen d1=new Dortgen();
d1.EnBoyBelirle(20,50);
d1.Yaz();
Dortgen d2=new Dortgen();
d2.EnBoyBelirle(25,12);
64
d2.Yaz();
}
}
Bu program Main bloundan almaya balar. nce Dortgen snf trnden d1 nesnesi
oluturulur. Bu nesneyle Dortgen snfndaki EnBoyBelirle metodu altrlr. Bu metot
geerli nesne iin En ve Boy zelliini metoda girilen parametreler yapar. Sonra ayn
nesneyle Yaz metodu altrlyor. Yaz metodu da geerli nesnenin zelliklerini
ve Alan metodunun sonucunu ekrana yazdryor. Sonra ayn olaylar d2 nesnesi iin de
gerekleiyor. Burada nemli olan bir snf trnden oluturduumuz her bir nesne iin
bellekte o snftaki tm metot ve zellikler iin bir yer almas ve tm ilemlerin o bellek
blgesinde yaplmas olayn kavramamz. Ayrca grdnz gibi static olmayan metotlarn
gvdesinde ayn snftaki zellik ve metotlar static olsun olmasn direkt olarak
kullanlabiliyor. Ancak program yle deitirseydik hata kacakt.
usingSystem;
class Dortgen
{
publicint En=20;
publicint Boy=5;
publicint Alan()
{
int Alan=En*Boy;
return Alan;
}
staticvoid Main()
{
Console.WriteLine("***************");
Console.WriteLine("En:{0,5}",En);
Console.WriteLine("Boy:{0,5}",Boy);
Console.WriteLine("Alan:{0,5}",Alan());
Console.WriteLine("***************");
}
}
nk
burada En ve Boy zellikleriyle Alan() metodu
tek
bana
kullanlamaz.
nce Dortgen snf trnden bir nesne oluturup bu nesne zerinden bu zellik ve metotlara
eriilmelidir. nk Main metodu static bir metottur.
rnek 2:
usingSystem;
class Dortgen
{
publicint En;
publicint Boy;
publicint Alan()
{
int Alan=En*Boy;
return Alan;
}
publicvoid EnBoyBelirle(int en,int boy)
{
65
En=en;
Boy=boy;
}
publicvoid Yaz()
{
Console.WriteLine("***************");
Console.WriteLine("En:{0,5}",En);
Console.WriteLine("Boy:{0,5}",Boy);
Console.WriteLine("Alan:{0,5}",Alan());
Console.WriteLine("***************");
}
staticvoid Main()
{
Dortgen d1=new Dortgen();
d1.EnBoyBelirle(20,50);
d1.Yaz();
Dortgen d2=new Dortgen();
d2.EnBoyBelirle(25,12);
d2.Yaz();
}
}
rnek 3:
usingSystem;
class Dortgen
{
publicint En=30;
publicint Boy=23;
publicint Alan()
{
int Alan=En*Boy;
return Alan;
}
staticvoid Main()
{
yaz d1=new yaz();
d1.Yaz();
}
}
class yaz
{
publicvoid Yaz()
{
Console.WriteLine("***************");
Console.WriteLine("En:{0,5}",Dortgen.En());
Console.WriteLine("Boy:{0,5}",Dortgen.Boy());
Console.WriteLine("Alan:{0,5}",Dortgen.Alan());
Console.WriteLine("***************");
}
}
Bu program almaz.
66
nk, static olmayan metotlarn gvdesinde sadece ayn snftaki zellik ve metotlar static
olsun olmasn direkt olarak kullanlabilir.
imdi evimizin yelerinin (annemizin, babamzn vs.) zelliklerini gireceimiz, yalarn
hesaplayacamz daha zevkli bir rnek yapalm. Yani evimizi bir snfm gibi dnelim.
usingSystem;
class EvHalki
{
publicint DogumYili;
publicstring Meslek;
publicstring Ad;
publicstring GozRengi;
publicint Yas()
{
return2008-DogumYili;
}
publicvoid OzellikleriYaz()
{
Console.WriteLine("---------------");
Console.WriteLine("Ad: "+Ad);
Console.WriteLine("Ya: "+Yas());
Console.WriteLine("Meslei: "+Meslek);
Console.WriteLine("Gz rengi: "+GozRengi);
Console.WriteLine("---------------");
}
}
class AnaProgram
{
staticvoid Main()
{
EvHalki annem=new EvHalki();//EvHalki snf trnden yeni bir
nesne oluturuldu.
annem.DogumYili=1964;//Oluturulan nesnenin bir zellii
girildi.
annem.Meslek="Ev hanm";
annem.Ad="Hatice";
annem.GozRengi="Mavi";
EvHalki babam=new EvHalki();
babam.DogumYili=1950;
babam.Meslek="Emekli";
babam.Ad="Kenan";
babam.GozRengi="Kahverengi";
EvHalki kardesim=new EvHalki();
kardesim.DogumYili=1987;
kardesim.Meslek="renci";
kardesim.Ad="Uur";
kardesim.GozRengi="Yeil";
annem.OzellikleriYaz();
babam.OzellikleriYaz();
kardesim.OzellikleriYaz();
}
}
67
usingSystem;
class EvHalki
{
publicint DogumYili;
publicstring Meslek;
publicstring Ad;
publicstring GozRengi;
publicint Yas()
{
return2008-DogumYili;
}
publicvoid OzellikleriYaz()
{
Console.WriteLine("---------------");
Console.WriteLine("Ad: "+Ad);
Console.WriteLine("Ya: "+Yas());
Console.WriteLine("Meslei: "+Meslek);
Console.WriteLine("Gz rengi: "+GozRengi);
Console.WriteLine("---------------");
}
}
class AnaProgram
{
staticvoid Main()
{
EvHalki annem=new EvHalki();
annem.DogumYili=1964;
annem.Meslek="Ev hanm";
annem.Ad="Hatice";
annem.GozRengi="Mavi";
EvHalki babam=new EvHalki();
babam.OzellikleriYaz();
}
}
68
Boy=boy;
}
staticvoid Main()
{
Dortgen d1=new Dortgen();
d1.EnBoyBelirle(20,50);
Console.WriteLine(d1.En+"\n"+d1.Boy);
}
}
Buradaki this anahtar szcklerinin Trke karl "beni aran nesnenin"dir. Peki ama
zaten this'i yazmasak da ayn ey olurdu. imdi baka bir rnek yapalm:
usingSystem;
class Dortgen
{
publicint En;
publicint Boy;
void EnBoyBelirle(int En,int Boy)
{
En=En;
Boy=Boy;
}
staticvoid Main()
{
Dortgen d1=new Dortgen();
d1.EnBoyBelirle(20,50);
Console.WriteLine(d1.En+"\n"+d1.Boy);
}
}
69
70
staticvoid Main()
{
int En=50;
int Boy=100;
Console.WriteLine(En+"\n"+Boy);
}
}
71
Bu program olduka basit. YardimciSinif snfnn iki tane metodu ve bir tane de zellii var.
Ancak zellik private olduu iin bu zellie baka bir snftan erimek veya deitirmek
mmkn deil. Bu yzden bu zellii deitirmek veya bu zellie erimek istediimizde
public olan SayiBelirle ve SayiAl metotlarn kullandk. Peki bunun bize ne faydas var?
Aslnda Sayizelliini public olarak ayarlayp direkt olarak zellik zerinde ilem
yaplabilirdi. te faydas:
usingSystem;
class YardimciSinif
{
int Sayi;
publicvoid SayiBelirle(int sayi)
{
if(sayi<0)
Sayi=0;
else
Sayi=sayi;
}
publicint SayiyiAl()
{
if(Sayi>100)
return Sayi/100;
else
return Sayi;
}
}
class AnaSinif
{
staticvoid Main()
{
YardimciSinif nesne=new YardimciSinif();
nesne.SayiBelirle(34);
Console.WriteLine(nesne.SayiAl());
}
}
Grdnz gibi zellie deer atamay ve zelliin deerini ekrana yazdrmay metotlar
sayesinde koullandrabildik. Eer direkt zellik zerinde ilem yapmaya kalksaydk byle
bir ansmz olmazd. imdi benzer bir durumu set ve get szckleriyle oluturalm:
usingSystem;
class YardimciSinif
{
int Sayi;
publicint SahteOzellik
{
set
{
72
if(value<0)
Sayi=0;
else
Sayi=value;
}
get
{
if(Sayi>100)
return Sayi/100;
else
return Sayi;
}
}
}
class AnaSinif
{
staticvoid Main()
{
YardimciSinif nesne=new YardimciSinif();
nesne.SahteOzellik=110;
Console.WriteLine(nesne.SahteOzellik);
}
}
Grdnz gibi nce YardimciSinif snfnda SahteOzellik adl bir zellik oluturduk.
Buzellik gerekten de sahtedir. zellie bir deer atanmaya alldnda set bloundaki,
zellik kullanlmaya alldnda da get bloundaki komutlar altrlr. Aslnda C#
ktphanesindeki zelliklerin ou bu yntemle oluturulmutur. rnein ileride greceimiz
Windows programlamada bir buton nesnesinin Text zelliini deitirdiimizde butonun
zerindeki yaz deiir. Halbuki klasik zelliklere deer atama ynteminde sadece zelliin
deeri deiirdi. Bu yntemde ise bir zellie deer atadmzda alacak komutlar
yazabiliyoruz. Unutmadan syleyeyim; programdaki value szc zellie girilen deeri
tutar. zellie girilen deer hangi trdeyse o trde tutar. Ayrca bu oluturulan SahteOzellik
zelliinin metotlara olduka benzediini de dikkatinizi ekmi olmal.
NOT: Aslnda tanmladmz her dizi Array snf trnden bir nesnedir. te bu yzden
tanmladmz dizilerle Array snfnn metot ve zelliklerine eriebiliriz.
rnein Length Array snf trnden bir zelliktir ve dizinin eleman saysn
verir. DiziAdi.Length yazlarak bu zellie eriilebilir.
NOT: Metot ve zelliklerin geri dn tipi bir dizi olabilir.
rnek:
usingSystem;
class YardimciSinif
{
publicint[] Dizi={7,4,3};
publicint[] Metot()
{
int[] a={23,45,67};
return a;
}
}
73
class AnaSinif
{
staticvoid Main()
{
YardimciSinif nesne=new YardimciSinif();
Console.WriteLine(nesne.Dizi[0]);
Console.WriteLine(nesne.Metot()[2]);
}
}
imdi isterseniz bir dizinin trn istenilen tre dntrmeye yarayan bir snf yazalm. Yani
snftaki metotlar dizinin btn elemanlarn istenilen tre dntrp bu oluturulan yeni
diziyi tutacak. C#'ta diziler arasnda bilinsiz tr dnm mmkn olmad gibi, bu ii
yapacak metot da yok. Yani yapacamz metotlar olduka faydal olacaktr.
usingSystem;
class Donustur
{
publicstaticint[] Inte(Array dizi)
{
int[] gecici=newint[dizi.Length];
for(int i=0;i<dizi.Length;i++)
gecici[i]=Convert.ToInt32(dizi.GetValue(i));
return gecici;
}
publicstaticstring[] Stringe(Array dizi)
{
string[] gecici=newstring[dizi.Length];
for(int i=0;i<dizi.Length;i++)
gecici[i]=dizi.GetValue(i).ToString();
return gecici;
}
}
Snfmz bu ekilde. Ancak snfmzn yalnzca inte ve stringe dntm yapan iki metodu
var. sterseniz dnm yaplabilecek tr saysn yeni metotlar ekleyerek artrabilirsiniz.
imdi bu snf bir program iinde kullanalm.
usingSystem;
class Donustur
{
publicstaticint[] Inte(Array dizi)
{
int[] gecici=newint[dizi.Length];
for(int i=0;i<dizi.Length;i++)
gecici[i]=Convert.ToInt32(dizi.GetValue(i));
gecici;
return
}
publicstaticstring[] Stringe(Array dizi)
{
string[] gecici=newstring[dizi.Length];
for(int i=0;i<dizi.Length;i++)
gecici[i]=dizi.GetValue(i).ToString();
return gecici;
74
}
}
class AnaProgram
{
staticvoid Main()
{
string[] a={"2","5","7","9"};
int[] b=Donustur.Inte(a);
Console.WriteLine(b[1]+b[3]);
int[] c={2,7,9,4};
string[] d=Donustur.Stringe(c);
Console.WriteLine(d[0]+d[3]);
}
}
HATIRLATMA: Grdnz
gibi
metotlarn
parametresindeki
dizi, Array
DiziAdi yntemiyle oluturulduu iin bu dizinin elemanlarna klasik indeksleme yntemiyle
eriemeyiz.
Bu
yzden
bu
dizinin
elemanlarna
ulamak
iin
Array
snfnn GetValue() metodunu kullandk.
Convert snfnn diziler iin olann oluturduktan sonra imdi de DOS ekranna bir kutu
izen snf hazrlayalm. Kutuyu , , , , , ve karakterleriyle oluturacaz. Bu
karakterlerin Unicode karlklarysa:
Karakter Unicode karl (16'lk sistemde)
2554
2550
2557
2551
255A
255D
Microsoft Word'u ap "Ekle" mensnden "Simge"yi setinizde bunlar gibi daha birok
simgeye eriebilirsiniz. Simgeleri direkt kopyala-yaptr yapabileceiniz gibi Unicode
karlklarn renip programnzda bu kodlar da kullanabilirsiniz. Ancak eer kopyalayapotr yapmsanz kod dosyanz (program.cs'nizi) kaydederken kodlamasn Unicode
olarak deitirin. Kodu Not Defteri'nde yazyorsanz kaydetmek istediinizde zaten sistem
sizi uyaracaktr. imdi snf yazmaya balayalm:
usingSystem;
class Buton
{
publicint Genislik;
publicint Yukseklik;
publicvoid Ciz()
{
string[,] dizi=newstring[Yukseklik+2,Genislik+3];
dizi[0,0]="";
dizi[0,Genislik+1]="";
dizi[Yukseklik+1,0]="";
dizi[Yukseklik+1,Genislik+1]="";
for(int i=1;i<Genislik+1;i++)
{
75
dizi[0,i]="";
dizi[Yukseklik+1,i]="";
}
for(int i=0;i<=Yukseklik;i++)
dizi[i,Genislik+2]="\n";
for(int i=1;i<=Yukseklik;i++)
{
dizi[i,0]="";
dizi[i,Genislik+1]="";
}
for(int j=1;j<=Yukseklik;j++)
for(int i=1;i<=Genislik;i++)
dizi[j,i]=" ";
foreach(string i in dizi)
Console.Write(i);
}
}
class AnaProgram
{
staticvoid Main()
{
Buton buton1=new Buton();
buton1.Genislik=20;
buton1.Yukseklik=13;
buton1.Ciz();
}
}
76
Bu program ekrana n yazar. Ancak stringin herhangi bir karakteri bu yntemle deitirilemez.
Bu yntemle string karakterlerine sadece okuma (read-only) amal eriebiliriz. rnein
aadaki rnek hataldr:
string a="deneme";
a[2]='';
Console.Write(a);
string trndeki bir sabit ya da deiken dizilerin baz zelliklerini salarken baz zelliklerini
salamaz:
NOT: Herhangi bir sahte zelliin set veya get bloklarndan yalnzca birini yazarak o zellii
salt okunur veya salt yazlr hle getirebiliriz. rnein Array snfnn Length zellii salt
okunur bir zelliktir.
NOT: C# 2.0'da ya da daha st versiyonlarda bir sahte zelliin set ve get bloklarn ayr
ayr private veya public anahtar szckleriyle belirtebiliyoruz. Yani bir zelliin bulunduu
snfn dnda salt okunur ya da salt yazlr olmasn salayabiliyoruz. Ancak az nce de
sylediim gibi bu zellik C# 1.0 veya C# 1.1 gibi daha nceki versiyonlarda geerli deildir.
NOT: get ve set anahtar szckleriyle eriim belirleyiciler kullanrken uymamz gereken baz
zellikler vardr:
1. Daima zellik bildiriminde kullanlan eriim belirleyicisi get veya set satrnda
kullanlan eriim belirleyicisinden daha yksek seviyeli olmaldr. rnein zellik
bildiriminde kullanlan eriim belirleyici private ise get veya set satrnda kullanlan
eriim belirleyici public olamaz.
2. get veya set satrnda kullanlan eriim belirleyici zellik bildiriminde kullanlan
eriim belirleyiciyle ayn olmamaldr. (Zaten gereksizdir.)
3. Yani iin z set ve get satrlarndaki eriim belirleyicileri yalnzca, zellii public
olarak belirtmi ancak zelliin set veya get bloklarnn herhangi birisini private
yapmak istediimizde kullanlabilir.
4. get veya set iin eriim belirleyicisi kullanacaksak sahte zelliin blou iinde hem
get hem de set blounun olmas gerekir.
Yapc Metotlar
77
rnek program:
usingSystem;
class Deneme
{
public Deneme()
{
Console.WriteLine("Deneme snf trnden bir nesne
oluturuldu.");
}
}
class AnaProgram
{
staticvoid Main()
{
Deneme a=new Deneme();
}
}
Bu program ekrana Deneme snf trnden bir nesne oluturuldu. yazacaktr. Bunu bu ekilde
kullanabilirsiniz. Ancak bunun asl kullanm snftaki zellikleri varsaylan deerden farkl
bir deere ekmektir. Yapc metotlarn u ekilde kullanm da mmkndr.
usingSystem;
class Deneme
{
public Deneme(int a,int b,int c)
{
Console.WriteLine(a+b+c);
}
}
class AnaProgram
{
staticvoid Main()
{
Deneme a=new Deneme(2,5,6);
}
}
Grdnz gibi yapc metot parametre de alabiliyor. Yapc metoda parametreler ise nesne
oluturulurken veriliyor.
78
NOT: llaki yapc metodun asl snf dnda bulunmasna gerek yoktur. rnein aadaki
gibi bir kullanm da mmkndr:
usingSystem;
class Deneme
{
Deneme()
{
Console.WriteLine("Bu snf trnden bir nesne oluturuldu.");
}
staticvoid Main()
{
Deneme a=new Deneme();
}
}
79
80