Академический Документы
Профессиональный Документы
Культура Документы
C# 3.0 Ile Programlama Temelleri PDF
C# 3.0 Ile Programlama Temelleri PDF
Emre Ayrlmaz
14-5
C# 3.0 ile Programlama Temelleri
Emre Ayrlmaz
ISBN: 978-605-5987-14-5
Copyright 2007, Bilge Adam Bilgisayar ve Eitim Hizmetleri San. ve Tic. A..
Eserin tm yayn haklar Bilge Adam Bilgisayar ve Eitim Hizmetleri San. ve Tic. A..ye aittir. Yaynevinden yazl izin
alnmadan ksmen ya da tamamen alnt yaplamaz, hibir ekilde kopya edilemez, oaltlamaz ve tekrar yaymlanamaz.
Bilge Adamn rencilerine cretsiz armaandr, para ile satlamaz.
Yazlm Nedir?1
Yazlmc Kimdir?2
Programlama Dilleri2
Yardm Kullanmak19
lk Uygulama25
devler40
Deikenler43
Veri Tipleri46
k Dizisi49
Aritmetik Operatrler52
devler57
IV indekiler
Giri61
Hatalar62
devler84
Blm 6: Algoritma89
Algoritma Nedir?89
Ak Diyagram90
Algoritma Uygulamalar91
dev94
Operatrler97
if Deyimi101
switch Deyimi103
devler111
Blm 8: Dngler115
for dngs115
while dngs118
do while dngs119
foreach dngs120
devler124
Blm 9: Diziler127
devler132
Metot Nedir?135
Metotlar Kullanmak135
Parametreler136
Metot Overload138
devler144
String147
ToCharArray151
Math152
DateTime154
IsLeapYear155
devler164
Bilgisayarla ilk tantm ve Basic dili ile uygulama gelitirdiim yllardan itibaren bilgisayar ve
yazlm konusundaki gelimeleri ok zor takip ettiimi hatrlyorum. nternet yerine BBSlerin (Bul-
letin Board System) kullanld o yllarda belirli konular zerinde bilgi paylam yapmak ve henz
yazlmla ilgili kitaplarn ilk kt bu dnemlerde yazlm renmek olduka zordu. Ancak gn-
mzde internetin hzl geliimi, Microsoftun yazlm hamleleri ve bu konudaki yaynlarn art ile
birlikte bilgi paylam kolaylat.
Yazlmc Kimdir?
Programlama Dilleri
Programlamaya Giri ve .NET Platformu
Bu blmde, bir yazlmcnn bilmesi gereken temel programlama kavramlarna giri yaplacaktr.
Bir yazlm oluturan eler ve yazlm alma sreci tamamlanana kadar geen aamalar ayr
ayr ilenecektir. Bu kavramlar yazlmcnn ve programlama dillerinin tanmlanmasna yardmc
olacaktr.
Bu blmn sonunda:
Yazlm Nedir?
Gnmzde bilgisayarlarn kullanm alanlar byk lde artmtr. Dolaysyla ilerimizi daha
hzl ve dzenli bir ekilde yapmamz, bilgisayarlar ne kadar iyi kullandmza baldr. Bunun
iin, eitli amalara gre yazlan uygulamalar kullanrz.
Yazlm, bilgisayarn belli bir ii yapmas iin tasarlanan komutlarn tmdr. Kullanm amalar ve
yerlerine gre birok deiik yazlm tr vardr. rnein kelime ilemleri iin MS Word, formlsel
ilemler iin MS Excel, tasarm ilemleri iin Adobe Photoshop ve yazlm gelitirme ilemleri iin
Visual Studio .NET gibi uygulamalar kullanlr.
Yazlmlar genel olarak blmde incelenebilir,
Sistem Yazlmlar: Bilgisayar donanmlarn yneten, kontrol eden ve uygulamalarn alabil-
mesi iin gerekli altyapy salayan yazlmlardr. Sistem yazlmlar sayesinde uygulama geliti-
rici; bellek, ilemci ve dier donanm zellikleriyle uramadan kendi projesine odaklanr. letim
sistemleri bu yazlm trne rnektir.
Uygulamalar: Son kullanclarn belli grevleri yerine getirmek amacyla kullandklar yazmlardr.
Bu yazlmlara rnek olarak, endstriyel otomasyon, mteri ilikileri ynetimi, kurumsal kaynak
planlama, tedariki zinciri ynetimi uygulamalar verilebilir.
Uygulamalar da kendi aralarnda kullanlan teknolojiye gre blmde incelenebilir.
Windows Uygulamalar: Windows uygulamalar, iletim sistemi zerine kurulan, arayz ve ierik
bakmndan daha zengin uygulamalardr. Windows uygulamalar durum ynetimi, olaya dayal
programlama, yerel bilgisayar kaynaklarn kullanma gibi zelliklerde web uygulamalarna gre
daha avantajldrlar. Bu avantajlarnn yan sra Windows uygulamalarnn tm istemci bilgisayar-
larda tek tek kurulma gereksinimi ve versiyonlama glkleri bu uygulamalarn kullanmn byk
lde kstlam, yazlm gelitiricilerin daha ok web uygulamalarna ynelmelerini salamtr.
Windows uygulamalarna rnek olarak, Microsoft Word, Microsoft Excel, Microsoft Live Messen-
ger ve Logo gibi muhasebe uygulamalar verilebilir.
Web Uygulamalar: Bir sunucu tarafndan yaynlanan bir web uygulamasn grntlemek iin
istemci tarafnda sadece bir tarayc uygulamas altrmak yeterlidir, dolaysyla kurulum ve ver-
siyonlama glkleri web uygulamalarnda yaanmaz. Durum ynetimi, olaya dayal programla-
ma, yerel bilgisayar kaynaklarnn kullanm asndan Windows uygulamalarna gre daha de-
Blm 1
zavantajldrlar. Web uygulamalarna rnek olarak, banka web siteleri, arama motorlar, e-ticaret
siteleri verilebilir.
Yukarda sz geen tm bu uygulama trleri ile beraber veya tek bana almak zere mobil
uygulama zmleri de gelitirilmektedir.
Veri girii: Yazlm, kullanclarn veri girmesi ile balar. Girilen veriler daha sonra ilenmek zere
hafzada saklanr.
lem: Veriler, gelitirilen yazlmn alma srecine gre bir dizi ilemden geirilir.
Uygulamalar, belli kurallar erevesinde yazlr. Bu yazm kurallar sayesinde bilgisayar, prog-
ramn ileyiini anlar ve gerekli sonular kartr. Uygulamalar, belirtilen yazm kurallar kontrol
edilerek derlenir. Bu derleme ilemi sonunda, yazlan kaynak kodlar bilgisayarn anlayaca tek
dil olan makine diline evrilir.
Yazlmc Kimdir?
Yazlmc, belirli ilevlere sahip uygulamalar gelitirebilen uzmandr. Bir yazlmcnn, zerinde
alt platformu, kulland teknolojileri iyi tanmas ve bilgisayarn anlayaca mantksal dilde
dnebilmesi gerekir. Yazlmclar bir proje takmnda veya altklar irketlerde stlendikleri
grevlere gre eitli unvanlar alrlar. Bu unvanlar aadaki gibi listeleyebiliriz,
Programlama Dilleri
Dnyada konuulan her dilin amac iletiim salamaktr. Farkl kltrlerden insanlarn anlaabil-
mesi iin ortak konutuklar bir dil gerekir. Programlama dillerinin amac da bilgisayar ile yazlm-
cnn haberlemesidir. Yazlmc, bilgisayara hangi komutlarn altrlmas gerektiini bilgisaya-
rn anlayaca dilden konuarak syler.
Programlamaya Giri ve .NET Platformu
Uygulamalar, makine diline evrildikten sonra alrlar. Numerik makine kodlar ve o bilgisayara
ait ilemci mimarisi komutlarndan oluan bu makine dili, en alt seviye dildir. Dolaysyla yazlm-
larn bu dilde yazlmas olduka zordur, bu yzden konuma diline daha yakn, kolay anlalabi-
lecek diller kullanlr. Bu dillere yksek seviye programlama dilleri denir. Programlama dillerinin
seviyeleri makine diline yakn olup olmamas ile llr.
Sz dizimi (Syntax): Bir dil, kendine ait kelimeler ile konuulur. Programlama dillerinin de benzer
bir yaps vardr. Programlama dillerindeki bu kelimeler, programlama dilinin anahtar kelimelerini
komutlarn olutururlar.
Gramer (Dilbilgisi): Programlama dillerini kullanmak iin sadece kelimeleri bilmek yeterli deil-
dir. Eer anlaml bir ekilde bir araya getirilemiyorsa, bu kelimeler hibir anlam ifade etmez.
Semantik (Anlamsal): Bir dili, kelimeleri doru bir gramer kullanm ile bir araya getirerek kul-
lanabiliriz. Ancak konuulan kelimelerin ne iin kullanld da nemlidir. Bir programlama dilinin
zelliklerinin nasl ve ne iin kullanld da, bu dilin semantiidir.
u ana kadar 2500den fazla programlama dili yazlmtr. Bunlardan bazlar Pascal, Basic, C,
C++, Java, Javascript, Cobol, Perl, Python, Ada, Fortran, Visual Basic .NET ve Visual C# prog-
ramlama dilleridir.
Yksek seviye programlama dillerine Visual Basic .Net, Java ve Visual C#, dk seviye prog-
ramlama dillerine ise Fortran ve C rneini verebiliriz.
Bilgisayarlar, icat edilmeleriyle birlikte belli bir ii yapmak iin bir dizi komutlara ihtiya duymular-
dr. En bata ok basit ilemler yapan bu komutlar zamanla nesne ynelimli (object oriented) gibi
ileri seviyede zellikler kazanmtr.
lk programlama dilleri, bilgisayarlarn zerinde baz aralarn yerlerini deitirerek veya yeni bile-
enler eklenerek yaplyordu. Yazlmn ilemesi iin bir devinime ihtiya vard. Eskiden yazlmlar
fiziksel olarak yazlyordu. Daha sonra fiziksel programlama yerini elektrik sinyaline brakt. Ku-
rulan elektronik devrelere dk ya da yksek voltajda akm gnderilerek bilgisayarn davran
belirlenmeye baland. Yksek voltaj 1, dk voltaj 0 saylarn ifade ediyordu. Bylelikle bugn
de kullanlan makine dilinin ortaya kmas iin ilk admlar atlm oldu.
Ancak bu ekilde yazlmlar gelitirmek, sistemi oluturan elektronik devrelerin her yazlm iin
batan kurulmasn gerektiriyordu. Bylelikle yazlmlar baz kavramlar erevesinde yazlmaya
baland. ncelikle bilgisayar donanm her yazlm iin batan kurulmamal, bunun yerine basit
bir donanmn zerine yazlan komutlar kullanlmalyd. Daha sonra, yazlmlar tek bir komutlar
kmesi yerine, kk paralar halinde yazlmaya baland. Bu paralarn yazlmn iinde defa-
larca kullanlabilmesi yordam (subroutine veya metot) kavramn ortaya karmtr. Bu modelin
kullanlmas ise mantksal karlatrmalar, dnglerin kullanlmasn ve yazlan kodlarn tekrar
kullanlabildii ktphane (library) mantn ortaya karmtr.
1957 ylnda IBM, dk seviye (makine diline yakn) bir programlama dili olan FORTRAN dilini
ortaya kard. FORTRAN ile beraber basit mantksal karlatrmalar, dngler, mantksal ifade-
ler (true-false) ve saysal deikenler (integer, double) kullanlmaya baland.
1959 ylnda, bu programlama dilinin zelliklerini alp, giri-k (Input Output IO) gibi yeni ilev-
ler salayan COBOL dili ortaya kt. Daha sonra 1968 ylnda, COBOL ve FORTRAN dillerinin en
iyi zelliklerini alarak Pascal dili ortaya kt. Ayrca Pascal dili, hafzadaki adresler zerinde ilem
yapmaya olanak veren iareti (pointer) kavramn da beraberinde getirdi.
1972 ylnda C, Pascal dilindeki birok hatay gidererek ortaya kt. C dili ilk defa Unix iletim
sistemini yazmak iin kullanlmaya balanmtr. C, dk seviye bir dil olmas zellii ile iletim
sistemlerinin yazlmasnda tercih edilmitir.
Btn programlama dilleri birok zellie sahip olmasna ramen, modler programlamann bir-
ok eksiini gidermek amacyla, yeni bir programlama modeli olan nesneye ynelik programlama
- OOP (object oriented programming) ortaya karld. C dilinin ve OOP modelinin tm zellikle-
riyle C++ dili oluturuldu.
C++ dilini, Sun Microsystems tarafndan kartlan Java takip etti. Java dilinin kullanm alanlar,
nesneye ynelik bir programlama dili olmas ve beraberinde getirdii GC (garbage collection) gibi
performans arttrc zellikleri ile byk lde geniledi.
Microsoft 1975 ylnda Bill Gates ve Paul Allen tarafndan kurulduunda vizyonu A pc for every
desk (Her masaya bir pc) idi, bugn ise Every desk is a pc (Her masa bir pc) oldu. Donanm ve
yazlm alanlarndaki gelimelerin hz ve birbirlerini srekli tetiklemesinin sonucunda bilgisayar
kullanc says hzla artt. Artan kullanc says beraberinde yeni gereksinim ve talepleri ortaya
kard. Bu taleplerin doal sonucu olarak da farkl platformlar ve farkl servis salayclar ortaya
kt. letiim, finansal hizmetler, ticaret, elence kullanclarn (zellikle internetin yaygnlama-
syla birlikte) en youn talep gsterdii hizmetler halini ald. Gnmze baktmzda Microsoftun
k noktasndaki hedefine byk oranda ulatn grebiliyoruz. Ancak geldiimiz noktada hzla
artan bilgisayar ve internet kullanc says, beraberinde gvenlik, iletiim, entegrasyon v.b. alan-
larda eitli engellerin ortaya kmasna neden oldu.
htiya duyduumuz tm bu altyap ilemleri iin hazr, kullanm kolay ve esnek bir platforma
ihtiya vard, Microsoft, 2000 ylnda .NET platformunu sunarak, otuzdan fazla programlama dilini
ayn at altnda toplad. VisualBasic. NET ve C#, .NET platformunu kullanan gnmzdeki en
Programlamaya Giri ve .NET Platformu
gl yksek seviyeli programlama dilleri arasnda yer almlardr. Bugn, .NET platformuyla
40n zerinde programlama dili kullanlabilir.
Microsoft .NET platformu her trl yazlm gelitirme ihtiyacna ynelik hazr bir altyap sunarak
uygulama gelitiricilerin Windows, web ve mobil platformlarna ynelik uygulamalar, ok daha
hzl, kolay ve gl bir ekilde gelitirebilmelerine olanak tand.
2
Microsoft
Visual Studio
Arayz
2 Microsoft Visual Studio
Arayz
Visual Studio Kurulumu
Yardm Kullanmak
lk olarak Visual Studio 2008in kurulum DVDsine ihtiya duymaktayz. Bu ihtiyac karladktan
sonra yaplacak tek ey DVDyi DVD srcsne yerletirmek ve karmza kan ynergeleri ta-
kip etmek olacaktr. DVDyi DVD srcsne yerletirdiimizde karmza ekil 2.1deki Autorun
(Otomatik Balat) ekran kmaktadr.
ekil 2.1
ekil 2.2
ekil 2.3
I have read and accept the license terms seeneini setikten sonra Next dmesine tklayarak
kuruluma devam ediyoruz.
Microsoft Visual Studio Arayz 11
ekil 2.4
Default seeneini seip ilgili boyutlandrma seeneklerini inceledikten sonra Install dmesine
tklayarak kurulumu balatyoruz.
ekil 2.5
12 Blm 2
ekil 2.6
Kurulum baarl bir ekilde tamamlandnda ekilde ki ekran zerinde bulunan Finish dme-
sine tklayarak kurulumu sonlandrabiliriz. Opsiyonel olarak bilgisayarn yeniden balatlmasnn
istenildii durumlarda bilgisayar kesinlikle yeniden balatlmaldr.
alma Sayfalar
Visual Studio ortamnda dosyalar, birer alma sayfas (Tab Pages) olarak alr. Bu dosyalar
sekmeler halinde sralanr. Sayfalar arasnda CTRL-TAB ksayolu ile gei yaplabilir.
Varsaylan olarak bu alma modelinde, e zamanl olarak sadece bir sayfa zerinde alma
yaplr. Ancak Visual Studio bize, alma ortamn paralara blme imkn da verir.
rnek:
1. Visual Studio alma ortamn an. Balang sayfas (Start Page) karnza kar. (Eer
balang sayfas kmyorsa View mensnden, Other Windows alt mensne iaret edin
ve Start Page komutunu sein.)
2. View mensnden, Other Windows alt mensne iaret edin ve Web Browser komutunu se-
in. Visual Studio amak istediimiz internet taraycs iin yeni bir sayfa oluturur.
3. CTRL tuuna basl tutarak TAB tuuna basn. Karnza kan menden, ak olan herhangi
bir sayfay sein.
4. Balang sayfasnn sekmesine sa tklayn ve kan menden New Vertical Tab Group
komutunu sein. Visual Studio birden fazla sayfa zerinde alma imknn, sayfalar sekme
gruplarna ayrarak salar.
Microsoft Visual Studio Arayz 13
Balang Sayfas
Visual Studio alma ortamn a-
tmz zaman karmza ilk gelen
balang sayfasdr. Bu sayfa, o ekil 2.7
ana kadar altnz projeleri ve
Visual Studio ortamn
.NET platformuna ynelik gncel haberleri gsterir. Bu menden ze- bir web taraycs olarak
rinde altnz son projelerinizi (Recent Projects) aabilirsiniz. Son kullanabilirsiniz.
projelerde gzkmeyen bir projeyi amak iin Open
Balang sayfasn kapattktan sonra, View men-
Project veya yeni bir proje oluturmak iin Create snden Other Windows alt seeneini iaretleyip
Project seeneini seebilirsiniz. Start Page seeneine tklayarak aabilirsiniz.
ekil 2.8
Ara ubuklar
Visual Studio, men komutlar iin grsel ksayollar ara ubuklar (Toolbars) ile sunar. Benzer
ilemler iin kullanlan komutlar bir ara ubuunda gruplanr. rnein standart ara ubuu, yeni
dosya oluturmak, bir dosyay amak - kaydetmek gibi genel dosya ilemleri iin kullanlr.
Ara ubuklar, varsaylan olarak menlerin altnda bulunur. Ancak, ara ubuklar tanarak yer-
leri deitirilebilir veya kayan duruma (float) getirilebilir. Ayrca istenen ubuklar gizlenebilir veya
gsterilebilir. Ara ubuklarnn listesini grmek iin View mensnden Toolbars alt mensn
sein.
Visual Studio bize kendi ara ubuklarmz oluturma imkn da verir. Farkl ilevlere sahip ko-
mutlar gruplanp, kiisel ara ubuu oluturulabilir.
14 Blm 2
rnek:
1. Balang sayfasnn st ksmnda bulunan bir ara ubuuna sa tklayn. kan men, var
olan tm ara ubuklarn listeler. aretli olan ubuklar eklenmi ubuklardr. Bu listeden
Formatting ara ubuunu sein.
2. Web ara ubuu zerinde Formatting ara ubuunu forma doru srkleyip brakn. Bu
ilem ubuu floating (kayan men) duruma getirir. Balna ift tklandnda, ubuk Doc-
kable (sabit duruma) gelir.
3. Ara ubuuna sa tklayn. Listenin en altndaki Customize (zelletir) komutunu sein.
4. Toolbars sekmesinde New (Yeni) komutuna tklayn. kan pencerede ubua Genel lem-
lerim yazn. OK dmesine basn. Visual Studio verilen isimde bir ara ubuu oluturur ve
kayan durumda grntler.
5. Commands (Komutlar) sekmesinde, Categories (Kategoriler) listesinden Help kategorisini
sein. Bu listenin yan tarafnda bulunan Commands listesinden Index komutunu bulun. Bu
komutu tayp, oluturduumuz Genel lemlerim ara ubuuna brakn.
ekil 2.9
Categories Commands
Tools Options
File Exit
View Web Browser
Window Close All Documents
Menler
Visual Studio menleri birok uygulamann menlerine benzer niteliktedir. Men isimlerinde, be-
lirli bir harfinin alt izilmitir. Belirtilen harfler ALT tuu ile birlikte basldnda, o menlere ksa-
yolla ulalr. Men komutlarnn bazlarnda ise, sadece o komuta zel bir ksayol tanmldr. Bu
ksayollar CTRL veya SHIFT gibi birka tu kombinasyonu ile gerekleir.
Microsoft Visual Studio Arayz 15
File Mens
Tm dosya ilemleri bu men altndadr. Standart ara ubuu ile bu mendeki baz komutlara
ulalr. File mensndeki komutlar ile:
Yeni bir proje, bir dosya veya bo bir solution (zm) oluturmak,
Oluturulmu bir projeyi veya var olan bir dosyay amak,
Web zerinde paylatrlm dosya veya projeler amak,
Ak olan dosya veya projeleri kapatmak,
Recent Files ile en son kullanlan dosyalar amak,
Recent Projects ile en son kullanlan projeleri amak,
Dosyalar kaydetmek, yazdrmak mmkndr.
Edit Mens
Tm yaz dzenleme ilemleri iin, bu mendeki komutlar kullanlr. Text Editor ara ubuu da
bu mennn ksayoludur. Edit mensndeki komutlar ile:
View Mens
Visual Studio alma ortamndaki tm pencereler bu men komutlaryla gsterilir. Ayrca Naviga-
te Backward ve Navigate Forward komutlaryla en son allan satra geri dnlr.
Dier Menler
Refactor (Yeniden Dzenleme); Kod zerinde eitli deiiklikleri kolayca yapabilmemizi sala-
yan seenekler bu men altndadr.
Project (Proje): Projeye dosya eklemek, karmak, proje zelliklerini gstermek ve referans ek-
lemek iin bu men kullanlr.
Build (Derleme): Projelerin almak zere derlenmesi iin gereken komutlar, bu men altndadr.
Debug (Hata Ayklama): Projede hata ayklarken gereken komutlar Debug mens altndadr.
Projeyi debug durumunda balatmak, BreakPoint eklemek (hata ayklarken durulmas gerek sa-
trlar ayarlamak) gibi ilemler yaplr.
Tools (Aralar): Visual Studio ile beraber yklenen yardmc aralarn listelendii mendr. Ara
ubuklarn zelletirmek iin kullanlan Customize seenei gibi Options seenei de en sk
kullanlan zelliklerden biridir. Visual Studio alma ortamnn tm ayarlar Options mensnden
yaplr. Environment ve Text Editor en sk kullanlan seeneklerdir.
Environment (Ortam): Sayfa dzeni ve grnm ayarlar, yaz tipi (font) ve renk ayarlar, komut-
lar iin ksayol ayarlar, internet taraycs ayarlar, yardm ve dinamik yardm ayarlar yaplr.
Text Editor (Metin Dzenleyicisi): Farkl programlama dillerine zg yaz dzeni yaplr.
rnek:
1. Tools mensnden Options komutunu sein.
2. Sol pencerede bulunan Environment mensnden Fonts and Colors (Yaz Tipi ve Renkler)
sekmesine gelin.
16 Blm 2
ekil 2.10
4. Sol penceredeki Environment mensnden Web Browser sekmesine gelin. Home Page me-
tin kutusuna www.bilgeadam.com yazn.
5. Sol penceredeki Text Editor mensnden C# alt mensn sein. Burada C# diline zel
metin dzenleme seenekleri bulunur. Sa pencerede, Display sekmesinin altnda Line Num-
bers (Satr Numaralar) seeneini iaretleyin. Bu seenek, C# projelerinde alrken satr
numaralarn gsterir.
Window (Pencere): Sayfalarn ve pencerelerin grnmlerini ve zelliklerini deitirmek iin kul-
lanlan komutlar bu men altnda bulunur. Tm ak alma sayfalar bu men altnda grld
gibi, istenen sayfa seilerek n plana getirilir. Ayrca, Close All Documents (Tm Sayfalar Kapat)
komutu ile ak olan btn sayfalar kapatlr. Auto Hide All (Tmn Otomatik Gizle) komutu ile
sabit hale getirilmi tm pencereler gizlenir.
Help (Yardm): Visual Studio alma ortamnda ok sk kullanlan yardm pencerelerinin grn-
m bu men ile salanr. Bu men ile ayrca, kullanlan Visual Studio alma ortamnn srm
hakknda bilgi alnr, son gncellemeler kontrol edilir, teknik destek iin gereken iletiim bilgilerine
ulalr.
Pencereler
Pencereler, Visual Studio iinde uygulama gelitirirken kullanlabilecek birok eleman belli grup-
lar halinde tutan alanlardr. alma ortamnda birok pencere bulunmasyla beraber en sk kul-
landklarmz, Solution Explorer, Toolbox, Object Browser, Properti-
Grmek istediiniz pencere- es, Watch, Output, Search Result, Task List pencereleridir.
lerin ounu View mensn-
den seebilirsiniz. Pencereler, Visual Studio ortam ierisinde istenilen yere tanabilir
veya sabitlenebilir. Pencerelerin birka genel zellii vardr:
Auto Hide (Otomatik Gizle): Pencerelerin, fare zerindeyken gzkmesi ve fare ekildikten son-
ra gizlenmesidir.
Dockable (Sabitlenebilir): Pencerelerin, Visual Studio ortam ierisinde bir yerde sabitlenebilme
zelliidir.
Microsoft Visual Studio Arayz 17
Floating (Kayan): Kayan pencereler herhangi bir yere sabitlenemez, her sayfann stnde durur
ve bylece srekli grnr.
rnek:
1. View mensnden Other Windows alt mensn iaret edin ve Macro Explorer penceresini
sein. Pencerenin balnda, biri Auto Hide dieri Close olan iki dme grlr. (Pencerenin
kt yere gre sadece Close dmesi de gzkebilir. Dier seeneklerin kmas iin pen-
cerenin balna ift tklayp, pencereyi Dockable durumuna getirin.)
2. Auto Hide dmesine (Raptiye ikonlu dme) basarak pencereyi gizleyin.
3. Pencereyi tekrar sein, Window mensnden Auto Hide zelliini sein. Daha sonra ayn
menden Floating zelliini sein. Pencerenin tanabildiini ancak sabitlenemedii grlr.
4. Tabbed Document seeneini sein. Pencerenin sekme olarak forma yerletii grlr.
5. Pencere seili iken, Window mensnden Dockable zelliini sein. Bu sefer pencerenin,
tand zaman alma ortamnn herhangi bir yerine sabitlenebildii grlr.
6. Pencere seili iken, Window mensnden Hide komutunu sein. Pencereyi tekrar amak iin
bu etaplar tekrarlayn.
Solution Explorer penceresi, View mensnden grlebildii gibi, varsaylan klavye seeneklerin-
de CTRL-ALT-L ksayolu ile de grlebilir.
Solution Explorer penceresinde Solution blmn gremiyorsanz, Tools (Aralar) mensnden Options (Se-
enekler) komutunu sein. Alan pencerede Projects and Solutions (Projeler ve Solutionlar) altnda bulunan
Always Show Solution (Her Zaman Solution Gster) kutusunu iaretleyin ve OK komutu ile kn.
18 Blm 2
Toolbox Penceresi
Toolbox (Ara Kutusu) penceresi, projelerde kullanlan eitli kontrol-
lerin listelendii penceredir. Buradaki eler, sekmeler iinde gruplan-
mtr. Her sekme, ortak platformlarda alan veya benzer ilevleri
olan kontrollere sahiptir. rnein, Data sekmesinde veri taban ilem-
lerinde kullanlan kontroller vardr. Printing kontrolleri Windows platfor-
munda alan projelerdeki kt ilemlerinde kullanlr.
rnek:
Properties Penceresi
Properties (zellikler) penceresi, seilen bir nesnenin zellikle-
rini grntler. Penceredeki grnm, zellik Ad - Deeri ek-
lindedir. Silik olarak grnen zellikler salt okunurdur ve deiti-
rilemez. Pencerenin zerindeki alr liste, alma sayfasndaki
kontrolleri listeler. Buradan istenilen kontrol seilerek zellikleri
grntlenir.
Yardm Kullanmak
Yazlm gelitirirken en ok kullanacamz kaynaklar
yardm dosyalar olacaktr. Bir programlama dilinin ok
eitli zellikleri, kullanm farkllklar olabilir. yi bir yaz-
lmc btn bu zellikleri ezbere bilen deil, bu zellikleri
en ksa srede bulan, renen ve kullanandr. Yardm
dosyalarnn kullanmn bilmek, yazlmcln temelini
oluturan nemli unsurlardan biridir.
Dynamic Help
Dynamic Help (Dinamik Yardm) penceresi, ierii otomatik olarak deien bir aratr. Kod yazar-
ken, pencerelerde veya sayfalarda nesneler seildiinde, kullancnn baka bir ilem yapmasna
gerek kalmadan, o nesne hakknda yardm konularn listeler. F1 tuuna bastmz zaman ise
seilen nesneye ait, Dynamic Help penceresinde ilk srada bulunan yardm konusu yeni bir say-
fada grntlenir.
Penceredeki yardm konular Help (Yardm), Samples (rnekler) ve Getting Started (Balang)
olarak blme ayrlmtr. Help blm, seilen nesne ve bu nesneyle ilikili olan kavramlarn
listelendii blmdr. Samples, konuyla ilgili kod rnekleri bulunan yardm dosyalarn gsterir.
Getting Started allan sayfalara gre deien, temel ilemleri ieren balang yazlarn gs-
terir.
Search
MSDN ktphanelerinde arama yaplan penceredir. Look for metin kutusuna, aranacak anahtar
kelimeler girilir. Filtreleme (Filtered by) ile arama sonular belli konulara gre snrlanr ve isten-
meyen seeneklerin gsterilmesi engellenir.
Search penceresinde, Search in titles only, Match related words, Search in previous results,
Highlight search hits arama seenekleri bulunur:
Search in titles only: Sadece konu balklarnda arama yapar, ierik ksmna bakmaz.
Match related words: Kelimeleri yazld gibi arar, benzer yazml kelimeleri aramaz.
Search in previous results: lk aramadan sonra aktif olan bu seenek ile kelimeler, bir nceki
aramada bulunan sonular arasna baklr.
Highlight search hits: Bulunan yardm sayfalarnda, aranan kelimelerin seili olmasn salar.
Bulunan sonular Search Results (Arama Sonular) penceresinde gsterilir. Bu pencerede;
Title: Konunun baln,
Location: MSDN ktphanelerinde hangi balk altnda bulunduunu,
Rank: Konunun, aranlan kelimeye olan yaknlk derecesini ifade eder.
20 Blm 2
Index
Yardm dosyalarndaki btn konular alfabetik srada dizer. Filtreleme ilevi, arama pencere-
sinde olduu gibidir. Bu pencerenin zellii, aranacak kelime yazlrken, bu kelime ile balayan
tm konularn alfabetik srada gsterilmesidir. Bu ekilde, aranan konulara ok hzl bir ekilde
ulalabilir.
Eer bir konu ile ilgili birden fazla yardm dosyas varsa, Index Results (Dizin Sonular) pence-
resinde bu seenekler gsterilir.
Contents
Contents (erik) penceresinde, tm MSDN ierii konulara gre hiyerarik yapda, kategorilere
ayrlm olarak gsterilir. Bu pencerede de ayn ekilde filtreleme yaplarak istenmeyen ierikler
kartlabilir.
Bir yardm dosyas akken, Help mensnden Sync Contents (erik Senkronizasyonu) komutu
seilerek o yardm dosyasnn Contents penceresindeki yeri bulunabilir.
2. Search in previous results seeneini iaretleyin. MSDN kelimesini aratn. Ka konu bulun-
du?
3. Search in previous results seeneini kaldrn. MSDN kelimesini tekrar arattnz zaman ka
konu bulunur? Search in titles only seeneini kaldrnca ka konu bulunur?
4. Search Results ve Search pencerelerini kapatn.
Microsoft Visual Studio Arayz 21
devler
Visual C# .NET ile Windows Tabanl
Programlama
Windows tabanl uygulamalar, Windows iletim sistemi zerinde alan uygulamalardr. Win-
dows uygulamalar Windows formlar ve kontrollerinden oluur. Visual Studio bu formlarn ve
zerindeki kontrollerin tasarmn, kodlarn yazlmn byk lde kolaylatrarak uygulama ge-
litirme srecini daha hzl ve kolay hale getirir.
lk Uygulama
Visual C#.NET ile yazacamz Windows uygulamas ekrana, Merhaba Dnya mesajn kartr.
Yazdnz kodun ne anlama geldiini belirtmek iin yorum satrlar kullanmak, kodlar okumay
kolaylatrr. Zaman getike yazlmc kendi yazd kod ile ilgili baz blmleri unutabilecei
iin yorum satrlar ok nemlidir. Yorum satrlar // ile balayarak yazlmaldr.
MessageBox.Show metodunun yazld kodun stne, yaplmak istenileni belirten bir yo-
rum satr yazn.
Form
Windows uygulamalar, Windows kontrollerinin tutul-
duu pencereler olan formlardan oluur. Bir Windows
projesi ald zaman form kontrol otomatik olarak
eklenir. kinci bir form eklemek iin Project mensn-
den Add Windows Form komutu seilir. Proje alt
zaman balang formu grntlenir. Balang formu
Soluton Explorerda grlen Program.cs dosyas ze-
rinden deitirilir.
Visual Studio ortamnda formlar, tasarm sayfas ve kod sayfas olmak zere iki farkl sayfada
grntlenir. Tasarm sayfas, formun ve zerindeki kontrollerin grnmlerini kolay bir ekilde
deitirmeyi salar. Visual Studio bu sayfada yaplan deiiklikleri kod sayfasnda e zamanl
olarak gnceller. rnein bir Button kontrolnn geniliini fare ile deitirdiimiz zaman, kod
sayfasnda bu kontroln Width (Genilik) zellii yaplan deiiklie gre gncellenecektir. Ayn
deiiklikler properties penceresinde de grlebilir.
ControlBox
Formun ControlBox zellii false iken uy- Form zerindeki simge durumuna kltme, ekran kapla-
gulama, Debug mensnden Stop Debug-
ging komutu seilerek kapatlabilir. ma ve formu kapama kutularnn grnmn ve eriilebi-
lirliini kontrol eder.
StartPosition
Form ald zaman nerede grneceini belirler. CenterScreen seenei formu ekrann orta-
snda gsterir.
Load Event
Formlar ald zaman Load olay gerekleir. Eer form, balang formu olarak seilmise,
proje balad zaman altrlmak istenen kodlar bu olayn metoduna yazlr.
Button
Bir Windows dmesini temsil eder. Button kontrolne basldnda Click olay tetiklenir. Bu olay
gerekletii zaman yaplacak ilemler, varsaylan olarak ButtonIsmi_Click metodunda yazlr.
TextBox
Bir Windows metin kutusunu temsil eder. Kullanclarn deer girerek yazlm ile haberlemesini
salamak amacyla kullanlr. TextBox kontrolndeki yaz deitii zaman TextChanged olay
gerekleir.
Label
Bir Windows etiketini temsil eder. Kullancya, form zerinde bir yazy gstermek amal kullan-
lr. Bu yaznn grnm, Label kontrolnn baz zellikleri ile deitirilir.
TextAlign
Yaznn Label kontrol zerinde nerede duracan belirler.
Font
Font (Yaz Tipi) zellii birok alt zellik tar. Bunlardan bazlar
en sk kullanlan zelliklerdir.
Name
Yaz tipinin ismini belirler. Varsaylan Microsoft Sans Serif sei- ekil 3.3
lidir.
Size
Karakterlerin boyutunu belirler. Varsaylan byklk 8,5 deerini alr.
Bold
Yaznn kaln (Bold) tipte olmasn belirler.
Italic
Yaznn italik (Italic) tipte olmasn belirler.
UnderLine
Yaznn alt izgili (UnderLine) olmasn belirler.
ekil 3.4
ComboBox
Bir Windows alan kutusunu temsil eder. ComboBox kontrol, kullanclarn baz deerleri alan
bir listeden semesini salar. Listeye tasarm annda veya alma annda e eklenebilir. Listeye
e eklemek iin kontroln Items zelliinden faydalanlr.
Tasarm annda e eklemek iin Properties penceresinden Items zellii seilir. String Collecti-
on Editor penceresinde, her enin deeri tek bir satrda yazlr.
ekil 3.5
alma annda e eklemek iin kod sayfasnda, kontroln Items zelliinin Add metodu kulla-
nlr.
ekil 3.6
ListBox
Bir Windows liste kutusunu temsil eder. Kontroldeki eler sabit bir liste olarak grntlenir. List-
Box kontrolne e ekleme ilemi, ComboBox kontrolndeki ilemler ile ayndr. ComboBox kon-
trolnden fark, birden fazla enin seilebilir olmasdr.
ekil 3.7
Timer
Bir Windows sayacn temsil eder. Timer almaya balad zaman, belirli zaman aralklarnda
Tick olay gerekleir. Timer kontrolnn Interval deeri, Tick olaynn ka milisaniyede bir ger-
ekleeceini belirler. rnein Interval deeri 2000 olan bir saya, Tick olaynda yazlan kodlar
2 saniyede bir altracaktr.
Sayac balatmak iin kontroln Start metodu, durdurmak iin ise Stop metodu kullanlr. Enabled
zellii, sayacn aktif olup olmadn belirler.
timer1.Interval = 1000;
//timer balatlyor
timer1.Start();
//bir saniye gecikmeyi nlemek iin kod bir kere arlyor.
label1.Text = DateTime.Now.ToLongTimeString();
}
MessageBox
MessageBox, kullancya bilgi gstermek iin alan mesaj kutusudur. Bu mesaj kutusu drt e-
den oluur.
ekil 3.8
Mesaj kutusu, kapanrken hangi dmenin basldn DialogResult nesnesi ile programcya bil-
dirir.
zellikler
zellikler (Properties), kontrollerin grnm, yerleim veya davran gibi eitli karakteristiklerini
belirlerler.
Nasl ki bir alar saatin renk, genilik, ykseklik gibi karakteristik, onu dier alar saatlerden ayrt
etmemizi salayacak zellikleri varsa, bir Button kontrolnn de rengini, geniliini ve yksekliini
belirleyecek karakteristik zellikleri vardr. rnein Button kontrolnn, Text zellii, Buttonun
zerinde yazan metni belirlememizi salar.
Kontrollerin birok zellii hem okunabilir hem de deitirilebilirdir. Ancak baz zellikler salt oku-
nur (ReadOnly) olabilir. Bu tip zellikler Properties penceresinde grnmezler.
Text
Kontrollerin Text zellii, zerinde grntlenen yazdr. Bu zellik alma annda ska okunup
deitirilerek, kullancyla iletiim salanr.
TextBox kontrolne girilen bir deerin okunup Label kontrolne yazlmas iin, kontrollerin Text
zellikleri kullanlr.
ekil 3.9
Name
Name zellii kontrollere ulamak iin kullanlan zelliktir. Birok kontroln Text zellii ayn ola-
bilir. Ancak her biri ayr birer kontrol olduklar iin, Name zelliklerin benzersiz olmas gerekir.
textBox2.Text = textBox1.Text;
Size
Size kontrollerin byklk zelliidir. Height (Ykseklik) ve Width (Genilik) zelliklerinden oluur.
Genellikle tasarm annda belirlenen bu zellik, alma annda da deitirilebilir.
label1.Height = 10;
label1.Width = 20;
BackColor
Kontrollerin arka plan renginin ayarland zelliktir. Bu zelliin deeri, Color yapsnda tanml
deerler ile belirlenir.
ForeColor
Kontrollerin zerindeki yazlarn rengini belirler.
ekil 3.10
Visible
Kontrollerin ekranda grnp grnmediklerini belirleyen zelliktir. true ve false olmak zere iki
deer alabilir
Top, Left
Kontrollerin, formun veya iine eklendii baka bir kontroln zerindeki koordinatlarn belirleyen
zelliklerdir. Top, stten uzakl belirtirken, Left soldan uzakl belirtir. Uzaklklar piksel cinsin-
dendir.
BringToFront
st ste duran kontroller arasndan en ne getirir.
SendToBack
st ste duran kontrollerin en arkasna gnderir.
Hide
Kontroln grnmesini engeller.
Show
Kontroln grnmesini salar.
Olaylar
Olaylar (Events), kontrollerin cevap verebilecei eylemlerdir. rnein alarm kurulmu bir alar
saat, Alarm olayna ses kartarak cevap verirken, bir Button kontrol Click olayna, bir TextBoxtaki
yaznn deimesi ile karlk verebilir. Bir olay gerekletii zaman yaplacak ilem, ilgili olayn
metoduna yazlr. rnein, Button1 isimli kontroln zerine tkland zaman gerekletirmek is-
tenen eylemler Button1_Click metoduna yazlr.
sual Studio sizin iin bir metot oluturur. rnein; Button iin Click, Textbox iin TextChanged.
Varsaylanlarn dnda dier olaylara ulamak isterseniz;
1. Kontroln zelliklerini an. (Kontrole bir kez tklayp F4 tuuna basn ya da sa tklayp Pro-
peties komutu verin)
2. Alan Properties penceresinde zerinde sar imek simgesi olan tua basn. Artk Proper-
ties penceresi seilen kontroln olaylarn listeleyecektir. Tekrar zellikleri grntlemek iin
ayn tuun yanndaki zerinde tablo resmi olan tua basmanz yeterli olacaktr.
3. Listeden istediiniz olay ift tklayarak o olay iin kod yazabilirsiniz. Alternatif olarak olayn
karna isimlendirme kurallarna uymak kayd ile istediiniz metot adn yazp Enter tuuna
da basabilirsiniz.
Click
Kontrol zerine tkland zaman tetiklenen olaydr. Windows tabanl programlamada en sk kul-
lanlan olaylardan biridir.
MouseDown
Fare, kontroln zerindeyken herhangi bir tuuna basld zaman gerekleen olaydr. Bu olay,
Click olayndan nce alr.
MouseUp
Fare, kontroln zerindeyken baslan tu brakld zaman alr.
Enter
Kontrol seildii veya zerine odaklanld zaman gerekleen olaydr.
Leave
Baka bir kontrol seilmek zere kldnda, bu kontroln Leave olay tetiklenir.
Olaylarn alma sralarn test etmek iin tm olay yordamlarna, mesaj kutusu
karan MessageBox.Show kodunu yazn. Daha sonra projeyi altrp kontrol-
ler zerinde yaplan deiikliklere gre olaylarn alma sralarna bakn.
1. File | New | Project komutu ile yeni bir Windows projesi an. Project Type (Proje Tipi) Visual
C#, Templates (ablonlar) olarak Windows Form Application sein ve ismini (Name) But-
ton_Yakalama olarak deitirin.
Visual C# .NET ile Windows Tabanl Programlama 35
ekil 3.11
ekil 3.12
3. Forma bir adet Button kontrol ekleyin. Name zelliini btnYakala, Text zelliini ise Beni
Yakala olarak deitirin.
36 Blm 3
ekil 3.13
MouseEnter olayna ift tkladktan sonra kod ksmnda btnYakala_MouseEnter metodu olu-
acaktr. MouseEnter herhangi bir kontrol iin fare zerine geldiinde gerekleecek olay
belirtir.
5. MouseEnter olay iin oluan metodun iine dmeyi hareket ettirecek kodlar yazn:
ekil 3.14
Amacmz eklin ak ucundan balayarak fareyi krmz ve yeil dmelere dedirmeden mavi
dmenin zerine getirebilmektir. Krmz ve yeil dmelere dediimizde oyunu kaybedecek,
siyah dmeden balayarak mavi dmeye demeye alrsak ekranda hile mesaj ekranda
grnecektir.
Tablo 3.1
Name BackColor
Button btnYesilUzun Green
Button btnYesilKisa Green
Button btnKirmiziUzun Red
Button btnKirmiziKisa Red
Button btnBitis Blue
Button btnEngel Black
3. btnYesilUzun isimli Buttonun MouseHover olayna ift tklayn. Kod ksmnda btnYesilUzun_
MouseHover adl metot oluacaktr. Buraya Yandnz mesajn gsterecek kodu yazn:
ekil 3.15
5. btnBitis ve btnEngel isimli Buttonlarn MouseHover olayna ift tklayn. Oluan metotlara
Yandnz ve Tebrikler, Kazandnz mesajlarn gsterecek kodlar yazn:
Tablo 3.2
Name Text
Label lblSaat [--]
Button btnKapat [X]
Timer tmrSaat
2. tmrSaat kontrolne ift tklayarak kod penceresine gein. Her geen saniye iinde o anki saati
lblSaat kontrolnn Text zelliinde gsteren kodu yazn:
3. Son olarak btnKapata ift tklayarak kod penceresine gein, Form1i kapatacak btnKapatn
Click olayna gerekli kodlar yazn.
ekil 3.17
40 Blm 3
devler
1.Treeview ve Progressbar kontrollerini inceleyin. Her bir kontroln herhangi 3 metodunu, 3 ola-
yn ve 3 zelliini aratrn.
ekil 3.18
4 Deikenler
ve Veri Tipleri
4 Deikenler ve Veri Tipleri
Deikenler
Veri Tipleri
k Dizisi
Aritmetik Operatrler
devler
Deikenler ve Veri Tipleri
Bu blmde deikenler, veri tipleri, tip dnmleri ve aritmetik operatrler hakknda bilgi veril-
mektedir. Deiken tanmlamann ve kullanmann, deikenlerin veri tiplerini, veri tipi semenin
nemini kavrayacaksnz.
Deikenler
Uygulama gelitirirken, baz verilerin daha sonra kullanlmak zere bir yerde tutulmas gerekebilir.
rnein bir hesaplama yaplrken, nceden hesaplanm veriler kullanlmak istenirse, bu verileri
tekrar hesaplamak yerine hafzada tutmak performans artracaktr. Veya veritabanndan alnan
bir kullanc isminin hafzada tutulmas, bu deer her istendiinde veritabanna balanp alnma-
sna tercih edilmelidir. Verilerin bu ekilde hafzada tutulmas deikenler ile salanr.
tip deikenad;
Burada tip verinin ierdii bilgiye en uygun veri tipini, deikenad ise daha sonra veri atamak ve
okumak iin kullanacamz temsil ismini belirtir.
Deikenler farkl trde verileri tuttuklar iin, farkl tiplere sahip olabilirler. Bir negatif veya pozitif
sayy tutan deiken ile yaz tutan bir deiken farkl tiplere sahiptirler.
string isim;
byte yas;
double maas;
Boluk, nokta, soru iareti, noktal virgl, ift trnak, tek trnak, aritmetik operatrler, karla-
trma ve atama operatrleri, parantezler kullanlamaz.
Say ile balayamaz.
Visual C#.NET dilinde tanml anahtar kelimeler kullanlamaz. rnein for,if,while,case,try,st
ruct,do,switch,true,false.
Uygulama gelitirirken hatal deiken tanm yaplma- Deiken isimlerinde Trke karakter kul-
s kodun derlenmemesine yol aacaktr. Hatal baz de- lanlrsa, farkl dil seenekli iletim sistem-
lerinde alma annda hata retecektir.
iken tanmlar:
44 Blm 4
int int;
short (sayi);
int 333sayisi;
string kelime;
string <isim>;
numara1 = 10;
numara2 = sayi1;
Tanmlama ilemi yapldktan sonra kod gidiat ierisinde deikenin deeri tekrar deitirilebilir.
Bir program oluturan kodlar bir btn deildir. Kodlar grevlerine gre blmlere ayrlmtr ve
programn gidiatna gre bu blmler bir kere veya daha fazla altrlabilir veya hi altrl-
mayabilir.
ekil 4.1
ekil 4.1deki duruma bakacak olursak; snftaki renci snf iindeki, Bilgeadam iindeki ve so-
kaktaki tm p kovalarn kullanabildiini grrsnz. Bilgeadam iindeki bir misafir ise Bilgea-
dam iindeki ve sokaktaki p kovalarn kullanabilir. Sokaktaki herhangi biri ise sadece sokakta
bulunan p kovalarn kullanabilir. Eriebilirlik i scopelardan da doru olmaktadr. Durumu,
Tablo 4.1den gzlemleyebilirsiniz.
Deikenler ve Veri tipleri 45
Tablo 4.1
renci Misafir Vatanda
Sokak evet evet evet
Bilgeadam evet evet
Snf evet
C#ta scopelar
ssl parantezler
ile ifade edilir.
ekil 4.2
ekil 4.2deki rnekte grld gibi kod gelii gzel yazlmam, belli bloklar satr girileri b-
raklan boluklarla scopelara ayrlmtr. Ancak bu boluklar insan gznn rahat okuyabilmesi
iin yaplmtr. Yazlmsal hibir deeri yoktur. Bilgisayar bir scopeun nerede balayp nerede
bittiini { ve } karakterleri sayesinde anlayabilir.
rnekte grld zere nce enBuyukSayi adl deiken tanmlanm. Bu deiken tanmlan-
d scope ve alt scopelarnda kullanlabilir. Bu bilgiden yararlanarak rnekteki deikenler hak-
knda unlar syleyebiliriz:
Tablo 4.2
enBykSayi ortancaSayi enKucukSayi
Scope 1 evet
Scope 2 evet Evet
Scope 3 evet Evet evet
Sabit
Sabit, srekli ayn deeri tutan deikendir. Uy- C# whitespace yani boluk tuu (space bar) ve sekme
gulamann almas boyunca deimeyen bir tuu (tab) ile oluan boluklara kar duyarl deildir.
deer kullanlyorsa sabit kullanlmas, kodun Kod derlendiinde bunlar otomatik olarak silinir.
kolay okunmasn salayacaktr.
46 Blm 4
Sabitlerin kapsam alanlar deikenler ile Sabitler tanmlandktan sonra deitirilemeyecei iin, ta-
ayndr. Genelde sabit deerler adlandrlr-
nmlandklar anda deerlerinin verilmesi gerekir.
ken tamam byk harf ile yazlr.
Pascal
Deikeni adlandrrken, deiken ismini oluturan kelimelerin ilk harfleri byk devam kk
harf olacak ekilde yazlr.
Camel
Pascal notasyonuna benzeyen Camel (Deve) isimlendirme standardnda tek fark, ilk kelimenin
tamamen kk harf, geri kalan tm kelimelerin ilk harfi byk olacak ekilde yazlmasdr.
Hungarian
Macar (Hungarian) notasyonu olarak bilinen bu standart ile deiken tanmlarken, ilk 2 veya 3
harfte deiken tipinin veya kullanlan kontroln ksaltmas, sonrasnda ise anmsatc kelime(ler)
yazlr.
Uppercase
Deikenler isimlendirilirken tamam byk harfler ile yazlr.
Underscore
Deikenler isimlendirilirken, deiken adn oluturan kelimeler altizgi (undercore) ile ayrlr.
Veri Tipleri
Veri tipi, deikenlerin tuttuklar deerlerin trn ve bellekte tutulacak boyutunu tanmlar. n-
ceki blmlerde bahsedildii gibi yazlmlarn amac kullancdan ald veriyi ileyip saklamak ve
istenildiinde kullancya sunmaktr. Kullancdan alnan veriler, bilgisayarn geici hafzasnda
(RAM) ksa sreli olarak saklanr. Verilerin sakland bu alanlara deiken (variable) diyoruz.
Veriler zerinde gerekli, ilemlerin yaplabilmesi iin deikenlerin trlerinin belirtilmesi gerekir.
rnein bilgisayarmzda kesirli saylarn kullanlaca daire alan hesaplamas gibi bir problem
zeceksek girdilerin trn belirtmemiz gerekir. C#ta kesirli saylar iin double veri tipi bulun-
maktadr.
Deikenler ve Veri tipleri 47
Tamsaylar
Tamsaylar
Grdnz gibi her veri tipinin iaretli ve iaretsiz versiyonlar Int16, Int32, Int64 .NET veri tiple-
ridir. Visual C# dilindeki karlk-
mevcut. Aralarndaki fark verilerin tutulduu bitlerde ilk bitin 0 lar short, int, long veri tipleridir.
veya 1 almas durumudur.
Ondalk Saylar
Ondalk Saylar
.NETte ondalk tipli veriler iin float ve double kullanlr. Tek duyarlkl saylar iin float, ift duyar-
lkl saylar iin ise double kullanlr.
48 Blm 4
Bir dairenin alann hesaplanmas gibi ondalk saylar kullanlacak ilemlerde float ve double veri
tipleri kullanlabilir. Ayn ekilde trigonometrik ilemlerde de ondalk say kullanld iin bu veri
tipleri kullanlabilir.
Metinsel fadeler
Metinsel fadeler
char 16
string 20+(n/2)*4
char veri tipi sadece tek bir karakter ierebilir. C#, dier dillerde olduu gibi 8 bitlik alanlar kullan-
maz onun yerine Unicode (Evrensel Kod) dediimiz karakter tipi kullanlr ve 16 bit deerindedir.
Dolaysyla 65,535 farkl karakteri temsil edebilir. Bu ince gibi kark dillerin dahi desteklenme-
sini salar.
string veri tipi ise birden fazla karakter deeri tutmak iin kullanlr. Bir isim, cmle, adres, makale
gibi uzun verileri tutmak iin kullanlr. Hafzada tuttuu yer ise bir forml ile belirlenir:
20+(n/2)*4
n burada string ierisinde tutulan karakter saysn temsil eder. rnein stanbul verisi iin haf-
zada 20 + ( 8 /2 ) * 4 = 36 bitlik alan kullanlr.
String, dier veri tiplerinden yap bakmndan olduka farkldr. lerleyen derslerimizde renece-
iniz referans tipinde bir deikendir. Bunun anlam verinin hafzada ayrlan bir yerde deil de onu
temsil eden baka alanlarda tutulduudur.
lkokul derslerimizde rendiimiz gibi harfler kelimeleri oluturur, kelimelerde cmleleri. Ayn e-
kilde charlar da stringi olutururlar. Yine ilerleyen derslerde reneceiniz dizi kavram ile ifade
etmek gerekirse string bir char dizisidir. Eski programclar metinsel ifadeleri tutmak iin char dizisi
tanmlard ve bunu her metinsel ifade iin gerekletirmek tam anlamyla bir ikence idi.
Mantksal fadeler
Mantksal fadeler
bool 16 true-false
bool veri tipi sadece 2 deer alabilir, true ya da false. bool veri tipi sayesinde deikenleri man-
tksal olarak tanmlayabiliriz. Mantksal ifadeler daha ok kesin deerler iin kullanlr, evet-hayr,
var-yok, ak-kapal, doru-yanl gibi. rnein, rencinin devini yapp yapmadn tutacak bir
deiken tanmlayalm ad da odevYapildiMi olsun, eer devini yapm ise deeri true deilse
false yaparz.
Deikenler ve Veri tipleri 49
k Dizisi
C# dilinde metinsel ifadelerden string veri tipini kullanrken, baz belli bal karakterleri kullanama-
yz. Bunun sebebi bu karakterleri C# dilinin de kullanyor olmasdr. rnein ift trnak. Bununla
birlikte bazen alt satra gemek de isteyebiliriz. te bu durumlarda string ifadeler iinde Escape
Squence denen k dizileri kullanmalyz.
Karakter Aklamas
\ Tek trnak
\ ift Trnak
\\ Ters bl
\0 Null
\a Uyar (Alert)
\b Gerisilme (Backspace)
\f Sayfa leri (Form Feed)
\n Satr Sonu (New Line)
\r Satr Ba (Carrige Return)
\t Yatay Sekme (Tab)
\v Dikey Sekme (Verical Tab)
rnek kullanmlar:
Deikenlerle alrken bir tipteki deeri, farkl bir tipteki deikene atama ihtiyac duyabilirsiniz.
Bu ilem ok yaygn olarak kullanlr. .NET Framework iki tr tip dnmn destekler, kapal
dnm (implicit conversion) ve ak dnm (explicit conversion). Kapal dnmde, tip d-
nm ilemi tamamen .NET Frameworke braklrken, ak dnmde net bir ekilde deerin
hangi tre dntrlecei belirtilir.
1 int Toplam;
2 byte adet = 5;
3 Toplam = adet;
50 Blm 4
Bu rnekte tip dnm 3 nolu satrda gerekleiyor. Sa taraftaki deikenin deeri sol taraf-
taki deikenin tipine yani int tipine evriliyor ve Toplam adl deikene atanyor. Tipler uyumlu
olduundan, yani int veri tipi, byte verit tipinin alabilecei deerleri desteklediinden, sistem evir-
me ilemini otomatik yapar. Buna kapal dnm (implicit conversion) denir.
1 int i;
2 double de = 10.56;
3 i = de;
Burada ise 3 nolu satrda hata oluacaktr. nk long veri tipi kendisinden daha kk olan int
veri tipine kapal olarak evrilemez. C#ta tm tipler birbiri ile uyumlu deildir. Bu tr durumlarda
kapal tip dnm yaplamaz. Uyumsuz tipler arasnda atama ilemi tip atamas (cast) ile yap-
lr. Buna da ak dnm (explicit conversion) denir. Bu da deeri evrilecek deikenin nne
parantez ierisinde tip yazlarak salanr. rnein, aadaki rnekte, byte veri tipindeki adet
deikeninin deerinin, int veri tipine evrilerek Toplam deikenine atanaca belirtilmitir.
Byte tipindeki bir deiken deikenin deeri ne olursa olsun, inte evirebilir ama tersi bir durum
sz konusu olmadndan, yani int veri tipinin alabilecei tm deerler byte veri tipine evrileme-
yeceinden, evrilecek tip mutlaka belirtilerek tip atamas yapmak gerekir.
1 byte yol;
2 byte zaman = 5;
3 byte hiz = 10;
4 yol = (byte)(zaman * hiz);
rnekte tanmlanm tm deikenler byte tipindedir ancak 4 nolu satrdaki tip atamas yaplmaz-
sa uygulamamz derleme hatas verecek ve derlenmeyecektir. Hatann sebebi, byte deikenlerin
arpmnn, int veri trnde sonu vermesidir. Veri tiplerinde byten alabildii maksimum deeri
hatrlaynz. Uygulama iki adet byte deikenin olas en byk deeri aldn dnp arpm
sonucunun yine bir byte deikende tutamayacana karar vererek sonucu int tipinde dndr-
mektedir. Ancak bir arpma ileminin sonucunun byten snrlarn gemediinden eminseniz ve
srarla sonucu byte deikende tutmak istiyorsanz, yukardaki gibi yol deikenine atama ilemi-
ni gerekletirirken, tip atamasn da yapabilirsiniz.
Aadaki tip dnm tablosu, kapal dnm hangi veri tipleri iin kullanabileceinizi gste-
rir,
Ak ve kapal tip dnmlerinin yan sra System.Convert snf kullanlarak da tip dnmleri
yaplabilir.
rnekte txtSayi1, txtSayi2 ve txtSonuc TextBox temsil etmektedir. TextBoxn Text zellii
bilindii zere string veri tipinde deer tar.
Satr 1 ve 2de txtSayi1 ve txtSayi2 adl TextBoxlara girilen string deerler matematik ileminden
geirilmesi iin Convert.To yntemi ile double veri tipine dntrlr.
Satr 3te arpm ilemi yaplarak, kan sonu carpim adl double veri tipine sahip bir deikene
atanr.
Satr 4te ise carpim deikenin deeri, txtSonuc TextBoxnn Text zelliine atanabilmesi iin
string tipine dntrlr.
Satr 4te kullanlan Convert.ToString() yerine tm veri tiplerinin sahip olduu ToString() metodu
da kullanlabilir.
4 txtSonuc.Text = carpim.ToString();
Burada dikkat edilmesi gereken en nemli nokta, evrilmek istenilen deerin evrilecek tipe uyum-
lu olmasdr. Aksi halde uygulamanz o noktada hata retecektir. rnein:
Grld zere yirmiiki yazs bir rakam deeri belirtmez. Trke olarak anlaml gelse de bilgi-
sayar iin bir anlam tamaz. Kod u ekilde olursa, bir hata alnmaz:
Hata vermezken,
Aadaki tablo, System.Convert snf kullanlarak yaplabilecek tip dnmlerini ksaca zet-
lemektedir,
52 Blm 4
Aritmetik Operatrler
Aritmetik Operatrler
+ Toplama
- karma
* arpma
/ Blme
% Blmden Kalan
++ Arttrma
-- Eksiltme
Blmden Kalan
Blme ( / ) ilemi kalansz bir sonu vermektedir. 10/3n sonucu 1 dir. Kalan bulmak iin ise
Blmden kalan (mod) ( % ) ifadesinden yararlanlr.
Arttrma ve Eksiltme
Genellikle programlama dillerinde bir deikenin deerini 1 arttrmak veya 1 eksiltmek iin u yola
bavurulur:
Deikenler ve Veri tipleri 53
x = x +1;
y = y -1;
x+=1;
x-=1;
x++;
y--;
Bu ifade de bir nceki rnektekiyle ayn ii yapar. Ancak baz durumlarda arttrma veya eksiltme
ifadelerinin deikenin sol tarafndan kullanldnda grlr:
++x;
--y;
Sonu
sene = 2001
gelecekSene = 2000
Sonu
sene = 2001
gelecekSene = 2001
Bu rnekte ise 3 nolu satrda bir fark gryoruz. Arttrma iareti deikenden evvel yazlm. Art-
trma iareti deer atamalarnda deikenden evvel eklenirse nce arttrma ilemine yaplr sonra
deikenin deeri atanr.
ekil 4.3
Tablo 4.3
Name Text
Label lblAd Adnz
Label lblSoyad Soyadnz
Label lblCinsiyet Cinsiyetiniz
Label lblDogumTarihi Doum Tarihiniz
Label lblAdres Adresiniz
Label lblSehir liniz
Label lblYas
TextBox txtAd
TextBox txtSoyad
TextBox txtAdres
RadioButton rdbErkek Erkek
RadioButton rdbBayan Bayan
DateTimePicker dtpDogum
ListBox lboxSehir
Button btnGonder Formu Gnder
3. Formu dolduran kii DateTimePicker kontrolnden doum tarihini setii anda lblYas adl
Label kontrolnn Text zelliine kiinin ya yazlacak.
4. dtpDogum adl kontroln ValueChanged olayna ift tklayn ve dtpDogum_ValueChanged
metoduna ya hesaplayan kodlar yazn:
ekil 4.4
Tablo 4.4
Name Text
Label lblSayac 0
Button btnArttir +
Button btnEksilt -
56 Blm 4
int sayac;
4. imdi btnArttir isimli Buttonun zerine ift tklayarak kod penceresine gein ve btnArttirin
Click olayna gerekli kodlar ekleyin:
Bu kod nce sayac deikeninin deerini bir arttrr ve sonucu lblSayac isimli Label kontrolnn
Text zelliine tip dnm yaparak eitler.
5. imdi btnEksilt isimli Buttonun zerine ift tklayarak kod penceresine gein ve btnEksiltin
Click olayna gerekli kodlar ekleyin:
Bu kod nce sayac deikeninin deerini bir eksiltir ve sonucu lblSayac isimli Label kontrolnn
Text zelliine tip dnm yaparak eitler.
btnArttra bastmzda sayac deikenimiz bir artyor, btnEksilte tkladmzda ise bir azalyor.
Grld gibi her iki metodun ierisinde ayn deikeni kullanabiliyoruz. nk sayac deikeni
bu metotlarn bir st seviyesinde tanmland.
Tablo 4.5
Name Text
TextBox txtSayi1
TextBox txtSayi2
TextBox txtSonuc
Button btnTopla Topla
3. btnTopla adl Button kontrolne ift tklayp toplama ilemi iin gerekli kodlar yazn:
Uygulamay tekrar altrn ve ayn saylar tekrar girin. Topla dmesine tkladnzda sonucun
30 olduunu greceksiniz. Bunun sebebi (+) operatrnn saysal deerler iin toplama ilemi
yapyor olmasdr.
devler
Bir bankann kredi blmnde alanlarn iini kolaylatracak bir uygulama yazn. Uygulama
kullancdan ekilmek istenen kredi miktarn, faiz oran ve vadeyi alp mterinin deyecei faiz
miktarn hesaplayacaktr.
ekil 4.5
Hatalar
devler
Hatalar ve Hatalarn Giderilmesi
Bu blmde uygulama gelitirirken karmza kan hata eitlerini, bu hatalarn yakalanma ve
giderilme srelerini reneceksiniz.
Giri
Yazlm dnyasnda kesin olan bir ey varsa, o da hatasz kod yazlamayacadr. Uygulama-
y gelitiren yazlmcnn deneyimi ne olursa olsun, projenin bykl ne olursa olsun hatalar
kanlmazdr. Hatalar, yazlmcnn yanllkla yazd bir koddan, daha nce ngremedii bir
durumdan veya kullancdan kaynakl olabilir. Yazlm gelitirirken hatalardan korkulmamas gere-
kir. Korkulacak olan durum, bu hatalarn, uygulama piyasa srldkten sonra ortaya kmasdr.
Yazlm gelitirirken uygulamann verdii her hatay zerek, daha salkl bir uygulama ortaya
karmak yazlmcnn temel grevlerinden bir tanesidir.
Kullancya daha salkl bir rn verebilmek iin yazlm firmalar, piyasaya srecekleri uygulama-
larnn hatalarn, nce kendi test mhendisleri sayesinde bulur ve dzeltir. Daha sonra bu uygu-
lamann beta srmlerini karp son kullanclardan gelecek hata bildirimlerini alrlar ve o hatalar
da giderirler. Bu uygulama gelitirme sreci de bazen yeterli olmaz, srasyla CTP (Community
Technology Preview) srmlerini, daha sonra da RC (Release Candidate) srmlerini karrlar.
Tm bu srmler sonucu kullanclardan gelen hata bildirimleri dorultusunda, son hatalar da
ayklayp rn piyasaya karrlar. Hatta byk lekli programlarda bunlar bile ou zaman
tm hatalar arndrmak iin yeterli olmaz; hatalar gidermek iin uygulamalara patch (yama) veya
service pack karrlar.
ekil 5.1
62 Blm 5
Yazlm jargonunda hatalara bug, hata ayklama ilemine ise debugging denir. Aslnda bug ve
debug kelimelerinin, hata ve hata giderme yerine kullanlmas olduka gariptir. nk bug ingiliz-
ce bcek, debuging ise bcekten arndrmak demektir. Bu kelimelerin neden yazlm dnyasnda
kullanldnn ilgin bir hikayesi vardr. 9 Eyll 1947de Amerikada Mark II adl askeri bir bilgi-
sayar durup dururken bozulur. Mark II, bir oda byklnde, birok elektronik paradan oluan
ve amac sadece matematik ilemleri yapmak olan bir bilgisayardr. Uzun aratrmalardan sonra
teknisyenler sonunda bozukluun sebebini bulurlar: Devrelerin arasna skp kalan, kendiyle
beraber, devreleri de kmre dndren bir bcek. Bcein devreden alnmas ve gerekli tamiratn
yaplmasndan sonra Mark II tekrar sorunsuz ekilde almaya balar. Mark IIden sorumlu asker
Grace Murray Hopper, bilgisayarn gnlk rapor defterine bcei bantla yaptrp u notu der:
First actual case of bug being found. (Bcein ilk vakas bulunmutur.). O tarihten bu tarihe
bilgisayarlarda meydana gelen hatalara bug, bu hatalar zme ilemine de debug denir. O
defter sayfas gnmzde, National Museum of American History mzesinde sergilenmektedir.
(Bcein ve Grace Hoppern resimlerini http://en.wikipedia.org/wiki/Admiral_Grace_Hopper ad-
resinde bulabilirsiniz.)
Uygulamalarnz hatasz (bu durum imkansz olduuna gre en az hataya sahip demek daha
doru olur) bir ekilde kullancya sunmak bir yazlm gelitirici olarak temel grevlerinizden bir
tanesidir. Bu blmde hatalar nasl bulacanz, daha da nemli olarak bu hatalar nasl gide-
receinizi greceksiniz.
Hatalar
Yazlm dnyasnda karlalan hata tipleri e ayrlr:
Derleme hatalar
alma zaman hatalar
Mantksal hatalar
Derleme hatalar, byk ounlukla kodlarn yanl yazlmasndan kaynaklanmaktadr. Tanmlan-
mayan bir deikenin kullanlmas, satr sonuna noktal virgl konulmamas, eksik ssl parantez
kullanm gibi. Bu hatalar, bulunmas en kolay hatalardr. nk kodlar derlenmez ve Visual Stu-
dio size bu tip hatalarn nerede olduunu tek tek gsterir.
alma zaman hatalar ise ounlukla kullanc yznden oluan hatalardr. rnein bir
TextBoxta yazlan deeri, kodunuz tarih (DateTime) tipine dntrmek isteyebilir. Kullanc eer
geerli bir tarih girmezse programnz hata verecektir. Bu tip hatalar bu blmde greceiniz try..
catch yaps ile zlebilir.
En zor bulunan hatalar ise mantk hatalardr. nk bu hatalar olutuunda hibir ekilde hata
mesaj almazsnz. Sadece kodlar istediiniz gibi sonu vermez, o kadar. rnein dviz kurlar ile
ilem yapan bir uygulamanzn da, kullanclarnz hesaplamalarn bazen yanl ktn size sy-
leyebilir. Bu hata bir satrda yanllkla art iareti yazmak yerine eksi iareti yazmaktan da meyda-
na gelebilir, internetten dviz kurlarn ekerken yanllkla dolar yerine avro kurunu ekmenizden
de kaynaklanabilir. Belki daha baka akla hemen gelmeyecek sorunlardan da kaynaklanabilir. Bu
durumda yzlerce hatta binlerce kod satr arasndan hatann nereden kaynaklandn bulmanz
gerekir. Kulaa imkansz gibi gelse de, neyse ki Visual Studio bize bu durumlar iin olduka yar-
dmc olur.
Derleme Hatalar
Derleme hatalarn programlama dilinin kurallarna uymayan (Szdizimi Hatas, Syntax Eror) veya
derleyicinin her durumda hata vermesi kesin olan (Derleyici Hatas, Compiler Error) kodlar yazl-
dnda gerekleir. Szdizimi hatasna rnek olarak unu verebiliriz:
Ayrca deiken adnn rakamla balamamas, boluk veya zel karakter barndrmamas gibi
tanmlama ile baka kurallar da vardr. Eer bu kurallardan birine uyulmazsa hata alnacaktr.
rnein:
int deneme;
deneme = Yaln;
Burada sz dizimi hatas yoktur. lk satrdaki deiken tanmlamas dorudur. kinci satrda ise bir
deikene deer atama sz dizimi dorudur. Ancak int veri tipi bekleyen bir deikene string bir
deer atand iin derleyici ikinci satrda hata verecektir.
Derleme annda, kodunuzun mantkl bir ekilde alp almad kontrol edilmez; sadece ve sadece kodunuzun
programlama dilinin szdizimine uyup uymad ve tr dnmlerinin doru yaplp yaplmad kontrol edilir.
Bu yzden yap olarak doru ancak istenildii ekilde almayan projelerinizde derleme hatas almazsnz.
ekil 5.2deki mesaj knca asla Do not show this dialog seeini iaretleyip Yes dmesine tklamayn. Bu durum, derleme
hatalarna sahip bir uygulama balatlmaya alldnda size uyar karmadan otomatik olarak eski alr srm gstermesine
neden olur. Eer byle bir durumla karlamsanz tekrar eski ayarlara getirmek iin Visual Studionun Tools mensnn altn-
daki Options seeneini tklayn. Karnza kan listeden Projects and Solutions dmn kenarndaki art iaretine tklayarak
an ve Build and Run seeneini sein. Sa tarafta alan ekrandaki On Run, when build or deployment errors occur: yazl
comboboxta Prompt to launch seeneini seip, OK dmesine tklayn.
64 Blm 5
Eer ekil 5.2deki pencerede No dmesine tklarsanz, ekil 5.3te grlen Error List pen-
ceresi ortaya kacaktr. Bu pencerede uygulamada geen tm derleme hatalarnn bir listesi
sunulur.
ekil 5.3
Her satrda, hatann tanm, hangi dosyada, satrda, stunda ve projede olduu gsterilir. rne-
in ekil 5.3teki hata satr tam olarak unu ifade eder: Hatalar (Project) adl proje ierisindeki
Form1.cs (File) adl kod dosyasnn 26. (Line) satrnn 21. (Column) karakterinde, int veri tipi
bekleyen bir deikene string bir deer atanmaya allm. (Description)
Sizin iin gereken en nemli stun tanm (description) stunudur. Dier stunlardaki bilgiler sizi
ok fazla ilgilendirmez. nk hatay grebilmek iin ilgili projedeki, ilgili dosyay ap, satr ve
stun saymazsnz. Bunu Visual Studio sizin iin otomatik olarak yapar. Hatay grmek iin, Error
List penceresindeki hatay gsteren satra ift tklamanz yeterlidir. Visual Studio imleci hatann
olduu noktaya konumlandrr.
Ayrca ekil 5.4te greceiniz gibi hatann olduu yerin alt izilir.
ekil 5.4
Hatal yerdeki alt izginin rengi hatann tipini de belirtir. Krmz, szdi-
zimi hatalarnda, mavi derleyici hatalarnda kullanlr. Eer alt izginin
rengi yeil ise ilgili yerde hata yoktur, sadece bir uyar vardr.
Ayrca fare ile alt izili yerin zerinde biraz beklerseniz hata mesaj ekil 5.5teki gibi grlecektir.
ekil 5.5
Projenizde kod yazmay bitirdikten sonra derleme hatas olup olmadn kontrol etmek mantkl
bir i deildir. Hatalar, kod yazlrken sk aralklarla kontrol edilmelidir. Projeyi test etmek iin her
seferinde altrmak bir sre sonra tam bir ikence olur. nk ama sadece projede derleme
hatas olup olmadn grmektir. Ancak altrlarak test edilmeye kalklrsa, hata varsa ekil
5.2deki pencere karnza kar ve buradan No dmesine tklayp hatalar grrsnz. Eer
hata yoksa uygulama bou bouna alr. Hele bir de ilk alta uzun sren bir ilem yapyorsa
(internetten bilgi indirmek, veritabanna balanp veri ekmek gibi) bo yere vakit kaybederseniz.
Derleme hata mesajlarn grmek iin uygulamay altrmak yerine derlemeyi (Build) tercih etme-
lisiniz. Derleme ilemini ya Visual Studionun Build mens altndaki Build [Proje Ad] seeneini
tklayarak ya da CTRL+Shift+B ksayolu sayesinde gerekletirirsiniz. Bu yzdendir ki deneyimli
.NET yazlmclarnn
klavyelerindeki CTRL,
Yazlm gelitirme ile yeni tanmsanz her yazdnz satrdan sonra CTRL+Shift+B kom-
binasyonunu kullanarak proje derlemeyi alkanlk haline getirmelisiniz. Zaman ierisinde Shift ve B tular dier
kazandnz deneyimle beraber derlemelerin skln biraz daha azaltabilirsiniz. tulara nazaran daha
fazla anmtr. Eer
derleme ilemi baar ile
Hatalar ve Hatalarn Giderilmesi 65
gerekleirse Visual Studionun en alttaki Status Barnn solunda Build Succeeded (Derleme
baar ile gereklemitir.) yazs grnr.
X expected
; expected
} expected
) expected
ekil 5.6da grlen satra ift tklanlr. mlecin konumland yere X olarak belirtilen karakter
yazlr.
rnek:
ekil 5.7
Y veri tipi bekleyen bir deikene X veri tipinde bir deer atanmaya allmtr.
Form zerindeki bir kontroln zelliine deer atanmaya allrken sadece kontroln ad
yazlmtr.
66 Blm 5
Deikenin bekledii veri tipinde bir deer girmek ya da uygunsa ConvertTo, Parse gibi yn-
temlerle tr dntrme ilemi gerekletirmektir.
Kontroln sadece ad yerine kontroln zellii yazlr.
rnek:
int sayac;
sayac = textBox1.Text;
int yas;
yas=on yedi;
Burada textBox1in Text zellii string veri tipindedir. Bu deer, int veri tipindeki sayac deikeni-
ne atanmak istendiinde bu hata meydana gelir. kinci bir hata da yas adl int veri tipindeki dei-
kene on yedi string deerini atamaya almaktr. Bu hatalarn zm u ekilde olacaktr:
int sayac;
sayac = Convert.ToInt32(textBox1.Text);
int yas;
yas=17;
Hatann ikinci trne rnek olarak u verilebilir. Bir formda textBox1 adnda bir textbox ve com-
boBox1 adnda bir combobox olsun. Yaplmak istenen textBox1 de Yaln yazs karmak ve
comboBox1in elemanlarna da Emre yazsn eklemektir.
textBox1 = Yaln;
comboBox1 = Emre;
Sadece kontrol adlar kullanld iin bu kodlar hataldr. Doru yazm u ekildedir:
textBox1.Text = Yaln;
comboBox1.Items.Add( Emre);
ekil 5.8
Kod yazlmamas gereken bir scopea kod yazlmtr. Baz scope sadece deiken tanmlamay
kabul edip, dier tr kodlarda hata verir. Baz scopelar ise deiken tanmlama da dahil hi bir
kod yazmna izin vermez. ekil 5.9da bu scopelar gsterilmitir.
Hatalar ve Hatalarn Giderilmesi 67
ekil 5.9
rnek:
namespace Hatalar
{
public partial class Form4 : Form
{
MessageBox.Show(Merhaba);
private void button1_Click(object sender, EventArgs e)
{
}
}
}
Burada iaretli kod ekil 5.9da da grlecei gibi yanl bir scopea yazlmtr. Hatal satr u
ekilde tarsak hatay gideririz:
namespace Hatalar
{
public partial class Form4 : Form
{
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(Merhaba);
}
}
}
68 Blm 5
ekil 5.10
Hatal deiken tanmlanmaldr veya tanmland satr kullanmndan st bir satra alnmaldr.
rnek:
Burada sayac adl daha nce tanmlanmayan bir deiken kullanlmtr. Ayn hata u kod blo-
unda da alnr:
ekil 5.11
Daha nce almam bir ssl parantez kapatlmtr. Baka bir deyile fazladan kapatma ssl
parantezi ( } ) kullanlmtr.
{
private void button1_Click(object sender, EventArgs e)
{
}
}
}
ekil 5.12
Bu durumu u rnekle aklayabiliriz: Bir araba irketi araba retir ve mterilere satar. Arabalarn
retim bandndan sorunsuz ve alr olarak kmas, gnlk hayatta bu arabalarn her zaman
alaca anlamna gelir mi? Tabi ki gelmez. Peki, hangi sorunlar yaanabilir?
Uygulamay altran kullanclar, alma zaman hatas olutuunda ekil 5.13teki pencereyi
grrler.
ekil 5.13
Bu mesajda sadece hatann kaba bir tanm bulunmaktadr. ekil 5.13teki rnekte hata iin sade-
ce Input string was not in a correct format (Girilen yaz doru biimde deil) tanm verilmektedir.
Bu hatann hangi satrda olduu, hatann daha detayl bir aklamas gibi bilgiler yoktur. Details
(Detay) dmesine tklanrsa ekil 5.14teki gibi ok kark, kullanclarn, hatta yazlmclarn,
hibir ey anlamayaca yazlar ortaya kar.
ekil 5.14
Byle bir hata mesajn kullancnn grmesi, istenmeyen bir durumdur. Bu ekran yerine kullanc-
ya, gayet anlalr bir ekilde Ltfen geerli bir tarih giriniz gibi bir mesaj gsterilebilir.
Kullancnn grd bu sevimsiz pencere neyse ki sadece uygulama, ilgili exe dosyas zerin-
den altrldnda grlr. Visual Studioda proje zerinde allrken ayn hata daha farkl bir
pencere ile gsterilir.
ekil 5.15
ekil 5.15te de grld zere bu pencere daha yazlmc dostudur. Hata olan satr sar renk ile
iaretlenir. Hata penceresinin en stnde hata mesaj yer alr. Troubleshooting tips yazan alanda
ise bu hatann muhtemel zmleri yer alr. Bu zmlerden birine tklanldnda o hata ilgili
MSDN sayfas alr.
Ancak hatann bilinmesi tek bana bir zm salamaz. rnein bu senaryoda kullancnn gir-
dii veri sayya dntrlebilir olmad iin bu hata alnr. Bu sebepten tr kullancdan veri
alma kodu kaldrlamaz. Bu hatay zmek iin eitli yntemler uygulanabilir. rnein sadece
rakam kabul eden bir TextBox kullanlabilir veya bu satra gelmeden nce girilen deerin raka-
72 Blm 5
ma dntrlp dntrlmeyecei kontrol edilebilir. Ancak rnekte verilen kod ok basit bir
koddur. ok daha kark ve uzun bir kodda meydana gelebilecek aksaklklarn hepsi dnle-
meyebilir. Bu yzden, hangi olaslkta olursa olsun, bir hata olutuunda program durdurmayp,
kullancya anlalr bir ekilde hatay anlatan, belki de hata olutuunda yazlmcnn sonradan
inceleyebilmesi iin bir dosyaya bu hatalar yazan veya hatay e-posta olarak gnderen bir z-
me ihtiya olacaktr. Bu zmn ad try..catchdir.
try..catch
try..catch, uygulamada hata olutuunda yaplmas istenilen kodlarn yazld try ve catch isimli
bloklardan oluan bir yapdr. try blounda hata vermesi muhtemel kodlar yer alr. Eer bir hata
oluursa, uygulama hata oluan satrda durup hata vermez; bunun yerine catch blou ierisinde-
ki kodlar almaya balar. catch bloundaki kodlar altktan sonra uygulama hata oluan try
blou ierisinden deil, try..catch yaps altndaki kodlardan devam eder. Bylelikle uygulamamz
hata olusa bile salkl bir ekilde almaya devam eder.
try
{
//Try Blou
//Buraya hata vermesi muhtemel kodlar yazlr
}
catch (Exception ex)
{
//Catch Blou
//Buraya hata olutuunda alacak kodlar yazlr
}
rnek olarak bir projede textBox1 isimli bir TextBox kontrolnz var. Kullancnn bu kontrole
girdii deeri, matematik ileminde kullanlmak iin int veri tipine evirmek istiyorsunuz. Bu kodda
meydana gelebilecek muhtemel alma zaman hatasn nceden kestirebilirsiniz. Kullanc int
veri tipine dntrlemeyecek bir veri girerse uygulama hata verir. Bu durum olutuunda, kul-
lancya anlalr bir ekilde uyar vermek de istersiniz. Bu yzden kodunuzu try blou ierisine
yazarsnz. Bu blok ierisindeki kodda bir hata olutuunda, beklediiniz hata veya baka bir hata
fark etmez, catch blou ierisindeki kod alr.
try
{
int sayi;
sayi = Convert.ToInt32(textBox1.Text);
}
catch (Exception ex)
{
MessageBox.Show(Geerli bir say giriniz.);
}
Catch blounun yanndaki (Exception ex) blm, oluan hata ile ilgili detayl bilgi almak iin kul-
lanlr. rnein catch blou ierisinde kullanlan ex.Message hatann verdii mesaj, ex.Source
ise hatann nerede olutuunu dner.
Hatalar ve Hatalarn Giderilmesi 73
Bir try blounun birden fazla catch blou olabilir. Bylelikle oluacak hataya gre farkl kodlar
altrabilirsiniz. rnein bir dosya ama programnda dosyann belirttiiniz yolda olmamas bir
hatadr, dosyann bozuk olmas baka bir hatadr.
Bir de try..catch yaps ile beraber alan finally blou vardr. Bu blok tamamen opsiyoneldir,
kullanp kullanmamak sizin kararnza kalmtr. finally blounda yazlan kodlar, try ierisinde bir
hata olusun ya da olumasn her zaman alr.
Bu iki senaryoyu da eitiminizin iler- Uygulamanzda try..catch blou kullanp, catch blou ierisini bo brakr-
leyen zamanlarnda greceksiniz. sanz uygulamanz asla hata vermez. Ancak bu istenmeyen bir durumdur.
nk uygulamann verdii hata zlmeyip, sadece gz ard edilmitir.
Mantiksal Hatalar
Mantksal hatalar, uygulamalarn istenildii gibi almad zamanlarda meydana gelen hata-
lardr. Dier hata trlerinin aksine bu hatalar mesaj olarak almak imkanszdr. Mantksal hatalar
%100 yazlmcdan kaynaklanr. Genellikle algoritmalarn yanl kurulmasndan veya yanllkla
bir kod yazlmasndan meydana gelir.
Mantksal hatalar daha iyi anlamak iin araba rneine geri dnelim. Araba retim bandndan
salkl bir ekilde kar yani arabada bir derleme hatas yoktur. Motoru vardr, drt kaps vardr,
tekerleri vardr ve hepsi yerli yerindedir. (derleme hatalarnn uygulamann nasl altyla ilgi-
lenmediini hatrlaynz) Ancak arabada bir problem vardr. Silecek altrlmak istenildii zaman
arabann kornas alar. Bu bir alma zaman hatas deildir. nk araba almamazlk etmez
veya silecek altrlmak istenildiinde elektriin fazla gelmesinden dolay birden durmaz. Sorun
sadece arabada bir parann istenildii gibi almamasdr. Bunun muhtemel sebebi elektrikten
sorumlu teknisyenin bir anlk dalgnl sonucu silecek kablolar ile elektrik kablolarn yanl yer-
lere balamas olabilir, silecek kablosunun gevek sklmasndan dolay kayp kornaya demesi
olabilir, direksiyon iindeki kablolarn yanl balanmasndan kaynaklanyor olabilir ve bu gibi
birok farkl neden olabilir.
decimal ortalama;
decimal sayi1;
decimal sayi2;
sayi1 = 10;
sayi2 = 30;
ortalama = sayi1 + sayi2;
MessageBox.Show(ortalama.ToString());
Bu kod 10 ve 30un ortalamasn alp bunu kullancya gstermek amac ile yazlmtr. Ancak
altrldnda grlr ki, ekrana 20 yerine 40 yazan bir mesaj kutusu kar. Bu kodlarda hi bir
ekilde derleme hatas yoktur. Her ey C# kurallarna uygun olarak yazlmtr, tr dnmleri
de doru bir ekilde yazlmtr. Kodda alma zaman hatas da yoktur. nk decimal veri tipi
bekleyen deikenlere doru tipte veriler atanmtr ve kullancdan deer alnmad iin baka
bir koul olumas da sz konusu deildir. Ancak yine de uygulama doru almaz. Btn sorun,
yazlmcnn ortalama ilemini yapan satrda (iaretli satr) toplam ikiye blmesini unutmasndan
veya yanllkla silmesinden kaynaklanmaktadr.
Grld zere mantksal hatalar olutuunda bir hata mesaj alnmaz. Ortada sadece yolunda
gitmeyen bir durum vardr. Bu sorunun nereden kaynaklandn bulmak ve onu gidermek yaz-
lmcnn grevidir. Mantksal hatalar yakalamak dier hata trlerini yakalamaktan daha zordur.
Yukardaki rnekte ortalama deikeninin onlarca satr sonra baka bir matematik ileminde kul-
74 Blm 5
Evinizde uzun zamandr kullandnz bir televizyonunuz var. lk aldnz gnden beri kumanda-
nzdan televizyonu kapatamyorsunuz. Bir gn, bu durum cannza tak ediyor ve problemi z-
mesi iin bir tamirci aryorsunuz. Televizyon da yazlm projesi gibidir. Nasl bir yazlm projesi
yzlerce satr koddan oluursa, televizyon da yzlerce elektronik devreden oluur. Televizyonun
kumandadan kapanmama sorunu bu devrelerin herhangi birinden kaynaklanyor olabilir. Tamirci
bu problemi nasl zer? nce belirttiiniz durumu (televizyonun kumandadan kapanmama soru-
nu) kendisi test eder ve problemi kendisi de tasdikler. Sonra problemin neden kaynaklanabilece-
ini kabaca dnr. Sorunun ya kumandada ya da televizyonda olduunu dnr. Kendisine
daha kolay geldii iin kumanday incelemeye balar. nce kapatma tuuna basld zaman
elektrik verip vermediine bakar. Eer elektrik varsa bir sonraki adm olan bu elektriin kzl tesi
vericiye ulap ulamadna bakar. Bir sorun yoksa bir sonraki adm olan kzl tesi sinyalinin
doru bir ekilde vericiden kp kmadna bakar. Burada da bir sorun yoksa bir sonraki adm
olan televizyondaki kzl tesi alcnn bu sinyali doru bir ekilde alp almadna bakar. Burada
da bir sorun yoksa bir sonraki adm olan alcnn televizyondaki elektrii kesmeye yarayan dev-
reye elektrik akm verip vermediini kontrol eder ve nihayet alcnn elektrii veremediini grr.
Bu durumda bir sonraki adm olan alcy ap iini incelemeye balar. Kumandadan deiik tu-
larna basarak eitli sinyaller gnderip her devrenin istenildii gibi alp almadn inceler.
ncelemelerinin sonucunda elektrik olmas gereken bir kabloda elektrik olmadn grr. Kablo
yanmtr. Bu kabloyu yeni bir kablo ile deitirir. Daha sonra kumandann kapatma tuuna basar
ve artk problemin zlm olduunu grr.
uygulama alrken bulunabilir. Bu yzden tam hesaplamann balad yerde uygulama durdu-
rulup, adm adm gerekleen ilemlerin takip edilmesi gerekir.
Breakpoint
Uygulamann alrken durmas istenilen noktalara Breakpoint koyulur. Breakpoint, ilgili satrn
zerindeyken F9 tuuna basarak veya satrn sol kenarndaki boluu fare ile tklayarak koyula-
bilir. Ayrca satr zerindeyken sa tkla gelen menden BreakPoint Insert BreakPoint seenei
ile de koyulabilir. ekil 5.17de grld gibi Breakpoint koyulan bir satr krmz renk ile iaret-
lenir.
ekil 5.17
Breakpoint, uygulamann alrken ilgili satrda durmasn salar. Dolays ile yazlmc o satrdan
balayarak adm adm kodlar izleyebilir. Uygulama breakpointin olduu satra geldiinde ekil
5.18de grld gibi sar bir renk alr ve debug moduna geer.
ekil 5.18
ncelenmesi gereken sadece deikenler olmayabilir. rnein bir ListBoxn o anda ka eleman
tadn ve bu elemanlarn ne olduklar renilmek istenebilir. Visual Studio sayesinde istenilirse
ListBoxn tm zellikleri veya sadece bir zellii mercek altna alnabilir. Hatta uygulama adm
adm ilerletilirken mevcut deerleri deiirse uyar vermesi de salanabilir.
Watch Penceresi
Bu senaryoyu gerekletirmek iin Visual Stu-
dio birok ara sunsa da en kullanls watch
penceresidir. Watch penceresi yazlmcya ta-
kip edecei deiken veya kontrollerin o anki
deerini, adn ve veri tipini gsterir. Watch
penceresi, uygulama sadece debug modda
ise grlr.
Eer watch penceresini yanllkla kapatmsanz Visual Studionun yaz yazarken ekil 5.21de grld-
Debug mensnden Windows - Watch - Watch 1 seeneini tklayarak gibi Visual Studionun ntelliSense
ya da Ctrl+D,W ksayolunu kullanarak tekrar kartabilirsiniz.
zelliinden de faydalanrsnz.
ekil 5.21
Eer watch ekranna bir kontrol ad yazarsanz, ilgili satrn yannda bir art iareti belirecektir. Bu
art iaretine basarsanz ekil 5.22de grld gibi incelemek istediiniz kontroln tm zellik-
lerinin o anki deerlerini grebilirsiniz.
ekil 5.22
Watch ekranna bir deiken ad yazdnzda, o deikenin o anki deeri Value (deer) stunun-
da siyah renkli olarak kacaktr. Uygulamanz adm adm ilerlettike eer izlediiniz deikenin
deerinde bir deiiklik olursa ekil 5.23teki gibi Value stunundaki deer krmz renk olacaktr.
ekil 5.23
Bir deikeni veya kontrol izlemek iin adn illaki watch penceresine elle yazmanza gerek yok-
tur. zlemek istediiniz deikeni veya kontroln adn koddan seip watch penceresi zerine
srkleyip brakabilirsiniz.
Baka bir alternatif olarak, ekil 5.24te grld gibi bir deiken ya da kontroln adnn zerin-
de sa tklama yaparak Add Watch seeneini de seebilirsiniz.
ekil 5.24
Hatalar ve Hatalarn Giderilmesi 77
Step Into
Uygulamann durmas ve deikenlerin izlenmesi tek bana bir ie yaramaz. Uygulamann adm
adm altrlp her satrda yaplan ilemlerin izlenmesi de gerekir. Visual Studio bu imkan yaz-
lmclara Step Into komutu ile verir.
Uygulamanz debug modunda iken F5 (altr) tuuna basarsanz, program debug moddan kar
ve kald yerden almaya devam eder.
ekil 5.26
7. Projeyi altrn.
8. txtDogumTarih kontrolne geerli bir tarih girin.
rn: 6.5.1980
9. btnYasHesapla kontrolne tklayn.
Herhangi bir hata alnmam; uygulama, girilen tari-
he gre ya hesaplamtr.
ekil 5.27
78 Blm 5
10. txtDogumTarih kontrolne geersiz bir tarih girin. rn: 21345 veya 41.5.1980
11. btnYasHesapla kontrolne tklayn.
ekil 5.28de grld gibi uygulama girilen metni tarih formatna eviremeyip hata vermitir.
ekil 5.28
try
{
DateTime dogumTarih;
dogumTarih = Convert.ToDateTime(txtDogumTarih.Text);
int yas;
yas = DateTime.Now.Year - dogumTarih.Year;
MessageBox.Show(yas.ToString());
}
catch (Exception)
{
MessageBox.Show(Ltfen geerli bir tarih giriniz.);
}
ekil 5.29
ekil 5.29da grld gibi uygulama bu sefer hata verip kapanmam, kullancya bir mesaj
kutusu gstermitir.
Hatalar ve Hatalarn Giderilmesi 79
try
{
DateTime dogumTarih;
dogumTarih = Convert.ToDateTime(txtDogumTarih.Text);
int yas;
yas = DateTime.Now.Year - dogumTarih.Year;
MessageBox.Show(yas.ToString());
}
catch (Exception ex)
{
MessageBox.Show(Programda hata olutu: + ex.Message);
}
ekil 5.30
ekil 5.31
80 Blm 5
6. Projeyi altrn.
7. txtUygulama kontrolne geerli bir internet adresi yazn. rnek: www.yazilimuzmani.com
8. btnCalistir kontrolne tklayn.
ekil 5.32deki gibi yeni alan bir browserda istediiniz sayfa grnd.
ekil 5.32
ekil 5.33
ekil 5.34
{
try
{
System.Diagnostics.Process.Start(txtUygulama.Text);
}
catch (Exception)
{
MessageBox.Show(Girdiiniz uygulama ya da dosya yolu
yanl.);
}
}
ekil 5.35
ekil 5.35teki gibi uyar mesaj alnd ve uygulama hata verip durmad.
3. Forma 5 tane Label kontrol ekleyin. Bir tanesinin Name zelliini lblSonuc, Text zelliini
ise 0 olarak deitirin.
4. Forma 2 tane TextBox kontrol ekleyin. zelliklerinde herhangi bir deiiklik yapmayn.
5. Forma 1 tane Button kontrol ekleyin. Name zelliini btnGecisNotuHesapla, Text zelliini
ise Gei Notu Hesapla olarak deitirin.
ekil 5.36
vizeNotu = Convert.ToDouble(textBox1.Text);
finalNotu = Convert.ToDouble(textBox1.Text);
double ortalama;
ortalama = vizeNotu * 0.3 + finalNotu * 0.7;
lblSonuc.Text = ortalama.ToString();
}
7. Projeyi altrn.
8. textBox1e 40, textBox2ye 60 deerini girin.
9. btnGeciNotuHesapla dmesine tklayn.
ekil 5.37
ekil 5.37deki gibi gsterilen sonucun doru olmadn greceksiniz. (Sonucun (40*0.3) +(60*0.7)
= 54 kmas gerekirdi.)
vizeNotu = Convert.ToDouble(textBox1.Text);
finalNotu = Convert.ToDouble(textBox1.Text);
double ortalama;
ortalama = vizeNotu * 0.3 + finalNotu * 0.7;
lblSonuc.Text = ortalama.ToString();
}
ekil 5.38
19. F11 tuuna basarak seili satr altrp bir sonraki satra gein.
Deerlerin ekil 5.39da gsterilen ekilde deimi olmas gerekir.
ekil 5.39
20. Tekrar F11 tuuna basarak seili satr altrp bir sonraki satra gein.
84 Blm 5
ekil 5.40
Bu satrda bir mantksal hata vardr. textBox2nin deeri finalNotu deikenine atanmas gerekir-
ken, finalNotu, textBoxin deerini alyor.
finalNotu = Convert.ToDouble(textBox2.Text);
ekil 5.41
devler
1. Yeni bir Windows projesi oluturup, ekil 5.42deki gibi tasarlayn. Uygulamann almas u
ekilde olacak ekilde kodlarn yazn:
TextBoxa girilen deer eer saysal ise 1. ListBoxa, deilse 2. ListBoxa atlsn.
ekil 5.42
ekil 5.43
10+20=30
30/2=15
double ortalama;
ortalama = 1nciSayi + 2ncisayi / 2;
lblSonuc.Text = ortalama.ToString();
}
Ak Diyagram
Algoritma Uygulamalar
dev
Algoritma
Programlamann temelinde alma akn, izlenecek yollar belirleyen algoritmalar vardr. Bir i
yaplmaya balanmadan nce nasl planlanyorsa, kodlamaya geilmeden nce de bir alma
plan belirlenmelidir. Yazlmlar, bu planda yazlan kodlar belli bir sra ile okur ve iler. Dolaysyla
algoritma yapsn ok iyi kurmak gerekir. Kurulan algoritmalar ak diyagramlar ile grsel zen-
ginlik kazanrlar.
Algoritma Nedir?
Algoritma, bir iin hangi etaplardan geilerek yaplacan gsteren alma plandr. Algoritma
bir programlama dili deildir. Programlama dillerine yol gsteren bir yntem dizisidir. Her dilde
algoritma yazlp uygulanabilir. rnein bir cep telefonunun el kitapnda yazan, rehber kayd
girmek iin izlenecek yollar, o iin algoritmasdr.
Algoritma yazarken, uygulamann almas iin kullanlan kaynaklarn, yaplmas gereken kon-
trollerin veya ilemlerin aka ifade edilmesi gerekir. Ayrca iyi bir algoritmann, tm ihtimalleri
kontrol edip istenmeyen durumlarda ne yaplmas gerektiini belirtmesi gerekir.
rnein, bir e-ticaret uygulamasnda rn sat algoritmas karlr. Satn alnacak rn seildik-
ten sonra, kullancdan adet miktar bilgisi alnr. Uygulama yazlrken, bu deerin int veri tipinde
olacana karar verildii dnlrse; kullancnn girdii adet miktar bu deikene atanmadan
nce kontrol edilmelidir. Eer int veri tipinin tutamayaca bir deer girilmise, alma annda
uygulamann beklenmedik ekilde durduu ya da istenmeyen sonularn retildii gzlemlenir.
Ayrca sistemin verdii hata, kullancnn anlamayaca bir mesaj ierecei iin, uygulamann
imajn da kt ynde etkiler.
Veri girii
alma zamannda ou zaman, ileyiin tamamlanmas iin dardan bir bilgi girilmesi gerekir.
Algoritmann almas iin ihtiya duyduu veriler, ilemi balatan kiiden veya belirtilen bir kay-
naktan alnabilir. Bu bilgiler salanmadan ilem devam etmez.
Kararlar
Karar ve kontrol yaplar algoritmann akn ynlendiren en nemli kavramlardr. Girilen veya
ilem sonucunda elde edilen veriler, ilemin amacna gre kontrol edilir ve sonuca gre algoritma
ak istenilen yere ynlendirilir.
lemler
Algoritmann ak boyunca veriler zerinde deiiklikler, yeni deer atamalar gibi ilemlere ihti-
ya duyulur. Algoritmalar kurulurken, yaplan ilemlerin yaln halde, tek tek yazlmas okunabilirlii
arttrr.
Algoritmalar adm sras ile alr ve karar yaplar sonucunda farkl bir yere ynlendirilmedii
mddete, bir sonraki adm ile ilemeye devam eder.
Ak Diyagram
Madde madde yazlan algoritmalarn okunmas kolaydr ancak ileyiin btnn grmek ou
zaman mmkn deildir. Ak diyagramlar, algoritmalar grsel biimde gstermeyi, dolaysyla
daha anlalr hale getirmeyi salar. Algoritmada yaplacak ilemlerin eitlerine gre eitli sem-
boller kullanlr.
Bala Bitir
ekil 6.1
Veri Girii
ekil 6.2
Karar Verme
ekil 6.3
Algoritma 91
Veri taban
ekil 6.4
Ekran
ekil 6.5
Printer
ekil 6.6
lem
Bir ilem yaplacan belirten semboldr. Her ilem iin ayr bir fonksiyon sembol kullanlmas,
ak diyagramn daha anlalr klar.
ekil 6.7
Fonksiyon
lem sembolne yazlamayacak byklkte ilemler, alt ilem olarak bu sembolle belirtilir.
ekil 6.8
Algoritma Uygulamalar
Bilet Satma
Bir tiyatro uygulamasnn srekli gerekletirecei temel ilem bilet satmaktr. Bu ilemi gerek-
letirmek iin gerekli kodlar yazlmadan nce, algoritma kurulmaldr.
3. Bo yer says sfrsa, o gnde belirtilen oyun oynamyordur ya da oyundaki btn yerler sa-
tlmtr.
4. Her iki durumda da bilet kesilemedii iin ekrana hata mesaj gsterilir. Gn ve oyun bilgilerini
batan almak iin ilk etaba dnlr.
5. Kullancdan oturmak istedii yer bilgisi alnr.
6. stedii yerin dolu olup olmad kontrol edilir.
7. Yer dolu ise ekrana hata mesaj gsterilir ve yer bilgisi tekrar alnmak zere 5. etaba dnlr.
8. Yer bosa, veritabannda oyunun yer kaytlar gncellenir.
9. stenilen gn, oyun ve yer bilgilerini ieren bilet yazcdan kartlr.
ekil 6.9
ay Demleme
Bu rnekte, bir ay demleme ileminde yaplmas gereken ilemleri, kontrol edilmesi gereken
olaylar ieren algoritma kurulur.
1. Kullancdan su vermesi beklenir.
2. Suyu stma ilemi yaplr.
3. Suyun kaynayp kaynamad kontrol edilir. Kaynamamsa 2. etaba dnlr.
4. ay daha nceden hazr olduu iin, kullancdan beklenmez. Demlie ay koyma ilemi
yaplr.
5. Kullancdan, demleme ileminin ne kadar srecei bilgisi alnr.
6. Kullancdan alnan demleme sresi ile imdiki zaman (ayn demlenmeye balad zaman)
toplanr. kan deer, BitisZamani isimli deikene atlr. Bu deiken demleme ileminin ne
zaman bitecei bilgisini tutar.
7. imdiki zaman, biti zamanndan kkse ayn demlenmesi iin ayrlan sre daha dolmam
demektir. Bu sre dolana kadar 7. etap tekrarlanr.
8. ayn demlendiini, kullancya ekran zerinde bildiren bir mesaj kartlr.
Algoritma 93
ekil 6.10
dev
1. Kullanc tarafndan girilen saynn ift ya da tek olup olmadn bulan algoritmay adm adm
yazn.
2. Ak diyagramn MS Visio ile izin.
7
Operatrler
ve Karar
Yaplar
7 Operatrler ve Karar
Yaplar
Operatrler
if Deyimi
switch Deyimi
devler
Operatrler ve Karar Yaplar
Bu blmde ilikisel ve mantksal operatrler ve program akn kontrol eden deyimleri incelen-
mektedir. Bir veya birden fazla deikenin durumunu kontrol etmek, hangi durumda programn ne
ekilde davranaca ele alnacaktr.
Operatrler
Uygulama gelitirilirken bir durum karlatrmas yapmak isteyebiliriz. rnein kullancdan al-
nan bir bilginin doruluunu snamak isteyebiliriz. Finansman ilemlerinde eksi deerler bir anlam
ifade etmeyecei iin kullancnn girdii bilginin sfrdan byk olup olmad gibi bir snama ili-
kisel operatrler yardmyla snanabilir.
likisel Operatrler
== Eittir
!= Eit deildir
< Byktr
> Kktr
likisel ve mantksal operatrler her zaman bool tipinde bir sonu dndrrler. Dolaysyla genel-
likle if deyimi ile birlikte kullanlr.
Bir say tahmin oyunu yaptmz dnelim ve kullancdan TextBoxa bir say girmesini isteye-
lim. Kullancnn sayy doru bilip bilmediini snayalm:
1 int sayi = 5;
2 int tahmin = Convert.ToInt32(TextBox1.Text)
3 if ( sayi == tahmin )
4 MessageBox.Show(Tebrikler, bildiniz.);
5 else
6 MessageBox.Show(zgnm, bilemediniz.);
3 nolu satrda grld gibi bir ilikisel operatr kullanlarak eitliin salanp salanmad
snanmtr.
98 Blm 7
Mantksal Operatrler
& VE
| VEYA
! DEL
Bunu parola giri ekrannda Kullanc Ad ve Parolann snand bir rnekte aklayalm.
4 nolu satrda grld gibi iki adet ilikisel operatr kullanlm. KullaniciAdi == admin ve
Parola == 123. Daha nce ilikisel ve mantksal operatrlerin her zaman bool tipinde deer
dndrdnden bahsetmitik. Dolaysyla bu iki ilikisel snamann bool tipindeki sonularn &
mantksal operatr ile snayarak her iki deerinde dorulunu kontrol etmi olduk.
3
4 if( KullaniciAdi == admin & Parola == 123 )
rnekte kullanc ad yanl girilse dahi parola da kontrol edilmektedir. Hlbuki kullanc ad yanl
girilirse parola doru girilse dahi sonu yanl kacaktr.
Dolaysyla parolay ikinci bir kez kontrol etmeye gerek yoktur. 4. satrdaki VE( & ) operatrn
Ksa Devre VE ( && ) yaparsak kullanc adnn yanl girilmesi halinde Parola kontrol yaplma-
dan sonuca daha ksa srede ulaarak yanl ( false ) sonucunu dndrecektir.
Bu yzden C#ta normal VE ( & ) ve VEYA ( | ) operatrlerinden daha ok Ksa Devre ( && ) ve
Ksa Devre VEYA ( || ) kullanlmaktadr.
Atama Operatr
Atama operatr bir adet eittir ( = ) dir.
deiken = deer;
Sadaki deeri soldakine aktarr. Ancak sadaki deer soldakinin veri tipine uyumlu olmak zorun-
dadr. Deilse, tip dntrme ilemi uygulanmaldr.
Bir oyun uygulamas gelitirdiinizi balangta her oyuncuya 30 puan verdiinizi dnelim.
byte oyuncu1,oyuncu2,oyuncu3;
oyuncu1 = oyuncu2 = oyuncu3 = 30;
Burada nce oyuncu3n deeri 30 olacak, ardndan oyuncu2ye oyuncu3 deeri atanacak ve
oyuncu1e de ayn ekilde oyuncu2nin deeri atanacak ve sonuta tm deikenler ayn deere
sahip olacaktr.
?: Operatr
?: Operatr C#ta olduka kullanldr. Bu operatr paradan oluur. Bu yzden l ( ternary
) operatr de denir. ?: operatr baz durumlarda ilerleyen blmlerde greceimiz if-else deyimi
yerine kullanlr. ?: operatr genellikle bir atama operatr ile beraber kullanlr.
100 Blm 7
Yazm u ekildedir:
koul blmnde bir deikenin deeri ilikisel ve mantksal operatrler ile snanr. Sonu doru
( true ) ise doru ksm deeri deikene atanr, sonu yanl ( false ) ise yanl ksm deeri de-
ikene atanr.
Bir saynn mutlak deerini alacamz varsayalm. nce saynn sfrdan kk olup olmadn
kontrol etmemiz gerekir. Eer sfrdan kk ise sayy eksi ile arparz, sfrdan byk ise saynn
kendi deerini alacaz.
Burada mutlakDeger deikeni sonu olarak 5tir. 3 nolu satrda atama yaplmadan evvel sayinn
sfrdan kk olup olmad snanm sonu olarak doru ( true ) kmtr ve ?: operatrnn
doru ksm altrlmtr.
* / %
+ -
<< >>
== !=
&
^
|
&&
||
?:
=
Operatrler ve Karar Yaplar 101
if Deyimi
C#ta uygulama aklarn kontrol etmek iin kullanlan deyimlerden biri if, dieri ise switchtir.
Switch deyimi bir sonraki konuda incelenecektir. if, uygulamada bir koulun kontroln salayan
deyimdir. Genel yazm ekli yledir:
if ( koul )
{
Koul doru ise yaplacak iler;
}
else
{
Koul yanl ise Yaplacak iler;
}
koul ksmnda likisel ve Mantksal Operatrler kullanlarak bir deikenin durumu kontrol edilir.
Hatrlarsanz ilikisel ve mantksal operatrler her zaman bool tipinde bir sonu dndrr demi-
tik. if deyimi bu sonuca gre ilgili blou altrr. if veya else deyiminden sonra sadece tek satr
yazlacaksa ssl parantezler kullanlmadan yazlabilir.
if ( koul )
doru ise yaplacak iler;
else
yanl ise Yaplacak iler;
3 if (parola == 123456)
4 {
5 MessageBox.Show(tebrikler, parola doru);
6 }
7 else
8 {
9 MessageBox.Show(zgnm, parola yanl);
10 }
rnei incelediimizde, 3 nolu satrda if deyimi ierisinde parola deikeninin deeri == operatr
ile kontrol ediliyor. Kullancn girdii deer 123456 deerine eit ise deyim true deerini dnd-
recek ve ilk scope alacaktr. Eit deil ise o zaman false deerini dndrecek ve else deyimin-
den sonraki scope alacaktr. imdi rneimizi biraz gelitirelim. Kullancdan parola dnda bir
de kullanc ad bilgisi isteyelim ve her ikisi de doru ise ilem baarl olsun.
{
MessageBox.Show(tebrikler, Kullanc Ad ve Parola doru);
}
else
{
MessageBox.Show(zgnm, Kullanc Ad veya Parola yanl);
}
Burada if deyiminde VE (&&) operatr ile iki koulunda true olmas durumunda girii doruladk.
Fakat durumun false olmasnn hangi kouldan kaynaklandn bilemiyoruz. Bu durumu i ie if
deyimi kullanarak zebiliriz.
if (kullaniciAdi == admin)
{
if (parola == 123456)
{
MessageBox.Show(tebrikler, Kullanc Ad ve Parola
doru);
}
else
{
MessageBox.Show(zgnm, Parolanz yanl);
}
}
else
{
MessageBox.Show(zgnm, Kullanc Adnz yanl);
}
byte ay = Conver.ToByte(txtAy.Text);
if (ay == 1)
MessageBox.Show(Ocak);
else if (ay == 2)
MessageBox.Show(ubat);
else if (ay == 3)
MessageBox.Show(Mart);
else if (ay == 4)
MessageBox.Show(Nisan);
else if (ay == 5)
MessageBox.Show(Mays);
else if (ay == 6)
Operatrler ve Karar Yaplar 103
MessageBox.Show(Haziran);
else if (ay == 7)
MessageBox.Show(Temmuz);
else if (ay == 8)
MessageBox.Show(Austos);
else if (ay == 9)
MessageBox.Show(Eyll);
else if (ay == 10)
MessageBox.Show(Ekim);
else if (ay == 11)
MessageBox.Show(Kasm);
else if (ay == 12)
MessageBox.Show(Aralk);
else
MessageBox.Show(1-12 aras say girmelisiniz);
rnekte olduu gibi 1 ile 12 aras girilen sayya gre kullancya ay bilgisi dnmektedir. Burada
pe pee 12 adet if yerine tek if deyimi kullanlm ve devamnda ise else if deyimleri ile devam
edilmi girilen deer 1 ile 12 aras deil ise else deiminde uyar mesaj verilmitir. Burada kullan-
lan else if deyimi, kodun tm if deyimlerini kontrol etmesini engellemi ve sondaki else deyiminin
kullanmn salamtr.
switch Deyimi
switch deyimi de if deyimi gibi uygulama aklarn kontrol etmek iin kullanlr. Genellikle daha
okunakl ve birok durum iin daha verimli olduu iin karmak else if bloklar yerine kullanlr.
Genel yazm ekli yledir:
switch ( deiken )
{
case durum1 :
yaplacak iler;
break;
case durum2 :
yaplacak iler;
break;
case durum3 :
yaplacak iler;
break;
.
.
.
default :
yaplacak iler;
break;
}
104 Blm 7
Bir nceki konuda else if deyimi ile yaptmz rnei birde switch ile yapalm:
byte ay = Conver.ToByte(txtAy.Text);
switch (ay)
{
case 1 :
MessageBox.Show(Ocak);
break;
case 2:
MessageBox.Show(ubat);
break;
case 3:
MessageBox.Show(Mart);
break;
case 4:
MessageBox.Show(Nisan);
break;
case 5:
MessageBox.Show(Mays);
break;
case 6:
MessageBox.Show(Haziran);
break;
case 7:
MessageBox.Show(Temmuz);
break;
case 8:
MessageBox.Show(Austos);
break;
case 9:
MessageBox.Show(Eyll);
break;
case 10:
MessageBox.Show(Ekim);
break;
case 11:
MessageBox.Show(Kasm);
break;
case 12:
MessageBox.Show(Aralk);
break;
default :
MessageBox.Show(1-12 aras say girmelisiniz);
break;
}
Operatrler ve Karar Yaplar 105
rnei incelediimizde, txtAy isimli TetxBoxa girilen sayya denk gelen ksm switch deyimi ta-
rafndan ilgili casede (durum) altrlr. lem yapldktan sonra break atlama ifadesi ile dier
caselerin almas nlenir. En sonda bulunan default if deyimindeki else gibi alr yani hibir
casein uymad durumda alan blmdr.
case ifadele-
switch deyimi kullanrken dikkat edeceimiz hususlardan bir tanesi de du- rinde deiken
rumunu kontrol ettiimiz deiken ile caselerde belirttiimiz sabitlerin veri kullanlamaz.
tiplerinin ayn veya uyumlu olmas gerektiidir.
ekil 7.1
Tablo 7.1
Name Text
Label lblSayi Bir Sayi Giriniz
Label lblMesaj 1-100 aras bir sayi girin
Button btnTahminEt Tahmin Et
Button btnBaslat Oyunu Balat
Button btnKapat Oyundan k
3. Tahmin edilecek sayy tutmak iin int tipinde bir deiken tanmlayn. Ardndan bu says
rastgele oluturacak Random nesnesini ekleyin. Bu nesnelere tm scopelardan ulalaca
iin global tanmlanmaldr.
int sayi;
Random rastgele = new Random();
4. btnBaslat adl Buttona ift tklayarak kod penceresine gein ve rastgele say reterek oyunun
balatan kodu yazn.
5. btnTahminEt adl Buttona ift tklayarak kod penceresine gein ve txtSayi kontrolne girilen
saynn tahmin edilen say ile ayn olup olmadn kontrol eden kodlar yazn.
106 Blm 7
6. Son olarak btnKapat adl Buttonun Click olayna formu kapatacak kodlar yazn.
ekil 7.2
Tablo 7.2
Name Text
PictureBox pcbResim
ProgressBar pbDurum
Label lblDurum Birazdan program yklemesi
balayacak
Button btnDevam Devam ->
Timer tmrYukleyici
4. tmrYukleyici adl Timer kontrolnn Tick olayna uygulamann gvdesini oluturacak if deyimi
ile yklenen modlleri gsterecek kodlar yazn.
//timer durdurulur
Operatrler ve Karar Yaplar 109
tmrYukleyici.Stop();
5. btnDevam kontrolne ift tklayarak kod penceresinde formu kapatan kodu yazn.
1. Yeni bir Windows projesi an ve ismini SansOyunu olarak deitirin. Uygulamanz ekran
grnts ekil 7.3teki gibi olacaktr.
ekil 7.3
Tablo 7.3
Name Text
Label lblSayi1 0
Label lblSayi2 0
Label lblSayi3 0
Label lblSonuc label1
Button btnBasla Start
110 Blm 7
3. Form1in Load olayna ift tklayarak kod penceresine gein ve gerekli kodlar yazn.
4. btnBaslaya ift tklayarak kod penceresine gein ve btnBaslann Click olayna gerekli kodlar
yazn.
int puan=30;
//puan 3 azaltn.
else
{
puan -= 3;
}
//puan Yazdrn.
lblSonuc.Text=Puannz : + puan.ToString();
//Eer puan<=0 ise kullancya yeniden oynayp oynamak istemediini
sorun.
if (puan<=0)
{
if (MessageBox.Show(Oyun bitti. Tekrar oynamak ister misiniz?,
this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1)==DialogResult.Yes)
{
//Tekrar oynamak isterse puan deikenini ve
Label kontrollerini programn balangcndaki hale getirin.
puan = 30;
lblSayi1.Text = 0;
lblSayi2.Text = 0;
lblSayi3.Text = 0;
lblSonuc.Text = Puannz : + puan.
ToString();
}
else
{
//Tekrar oynamak istemezse uygulamay kapatn.
this.Close();
}
}
}
devler
1. Alrken saydamlktan donuklua, kapanrken donukluktan saydamla geebilen bir form
hazrlayn. Bunun iin formun Opacity zelliini kullanabilirsiniz.
2. Msn Messenger uygulamasnda olduu gibi Buttona tklandnda formu titreten uygulamay
hazrlayn.
8 Dngler
8 Dngler
for Dngs
while Dngs
do while Dngs
foreach Dngs
devler
Dngler
Dngler bir programlama dili iin en ok kullanlan ifadelerden biridir. Ard ardna ya da sral bir
i yaptracamz zaman bunu dngler yardmyla yaparz. C# dilinde 4 adet dng eidi vardr.
Bunlar for, while, do while ve foreach dngleridir.
for Dngs
for dngs balang deerinden itibaren belirtilen koul salanana kadar iine yazld kod
parasn ard ardna altrr. Genel yazm ekli yledir;
for ( balang;koul;artm)
{
yaplacak iler;
}
balang, dng kontrol deikeni olarak da ifade edilebilir. Dng ierisinde bir saya grevini
grr.
artm, balang deerinin dngnn her admda artma yada azaltma miktarn belirler. Eer ba-
lang deeri hi deimez ise sonsuz dng oluur.
imdi 1den 100e kadar olan saylarn toplamn bulan bir uygulama gelitirelim:
int toplam = 0;
MessageBox.Show(toplam.ToString());
balang, byte i = 1; for dngsnde dngnn hangi admda olduu i deikeninin durumu ile
ifade edilir.
koul, i <= 100; koulun grevi dngnn devam edip etmeyeceine karar vermektir. Her admda
koul kontrol edilir. Doru ( true ) verdike dng devam eder. Buradaki rnekte i deikeni 100
den kk ve eit iken dng almaya devam edecektir.
Bu bilgiler nda imdi de 1den 100e kadar ift saylarn toplamn bulalm.
int toplam = 0;
for (byte i = 0; i <= 100; i += 2)
{
116 Blm 8
toplam += i;
}
MessageBox.Show(toplam.ToString());
Sonu: 2550
Grdnz gibi sadece artm ksmn deitirdik. Bylelikle dngmz ilk rnekteki gibi 100 kere
deil 50 kere dnm oldu.
imdiye kadar yaptmz rneklerde balang deeri artarak devam ediyordu. Baz durumlarda
balang deerinin azalarak devam etmesini isteyebiliriz. rnein bir ie bavuru formunda sene
bilgilerini bir ComBoxa teker teker elle girdirmek yerine bunu bir for dngs yardmyla rahatlkla
yapabilir. En yakn senenin en stte olmasn istenirse bu balang deerini 2008den 1908e
doru azalarak gitmesi gerekir:
Kullancdan aldmz bir saynn asal olup olmadn denetleyen bir program yazalm. Bildiiniz
gibi asal saylar 1e ve kendisinden baka saylara tam blnmeyen saylardr. Bir saynn asal
olup olmadn, onu 1 ve kendisi hari tm saylara blmnden kalan denetleyerek bulabiliriz.
Bu rnekte for dngs yannda mod ( % ) operatrnden ve program atlama ifadesi breakten
yararlanacaz. Zira bir saynn birden fazla tam bleni olabilir ve bizim bulduumuz ilk tam b-
lenden sonra dngnn almasna gerek kalmayabilir. Bu ekilde byk bir say girildiinde
dngnn uzun sre almasn engelleyerek performans art salam oluruz.
6 {
7 int kalan = sayi % i;
8 if (kalan == 0)
9 {
10 tamBolen = i;
11 asalMi = false;
12 break;
13 }
14 }
15
16 if (asalMi == true)
17 MessageBox.Show(sayi.ToString() + asaldr.);
Dngler 117
18 else
19 MessageBox.Show(sayi.ToString() + asal deildir. Tam
bleni: + tamBolen.ToString());
2 nolu satrda asalMi deikenine true deerini atyoruz. Bu, kullancnn girdii tm saylar n-
ceden asal kabul ettiimiz anlamna gelir. For dngs ierisinde asal say kuraln bozan durum
gerekletirirse asalMi deikeni false olmaktadr.
3 nolu satrda tamBolen deikeni ile kullancnn girdii saynn en kk tam blenini bilgi ma-
hiyetinde saklayacaz.
5 nolu satrda grdnz gibi balang noktamz 2 ve koulumuz kk eittir <= deilde sade-
ce kktr < . Bildiiniz gibi asal say kuralna gre say 1 ve kendisinden baka bleni olmayan
say idi. Balang noktasn 2 vererek 1 saysn, kk eittir yerine kk yazarak saynn ken-
disini blme ileminden saf d tutuyoruz.
8 nolu satrda kalan kontrol ediliyor. Eer kalan sfrda ise 10,11 ve 12 numaral satrlar altr-
lacak.
11 nolu satrda daha sonra 16 nolu satrda kontrol edeceimiz asalMi deikeninin deerine true
atanyor.
12 nolu satr performans iin kilit noktadr. Burada break ifadesini kullanmasak da uygulamamz
yine doru sonu retecektir. 1000000 gibi byk bir say girildiinde dngmz 2 den 999999
a kadar alacaktr. Ancak dngmz henz ilk admda iken yani i deikeni 2 iken tamBolen
bulunursa dier saylarn kontrol edilmesine gerek yoktur. Bu yzden break ifadesi yardmyla
dngden klr ve geri kalan saylar gereksiz yere kontrol edilmez.
16 nolu satrda asalMi deikeninin durumu kontrol edilerek kullancya uygulamann sonu hak-
knda bilgi verilir.
Continue
Bir dngnn sonraki tekrara erken geiini salamak iin continue ifadesi kullanlr. Bir bakma
break ifadesinin tamamlaycsdr. Daha nceki konuda rneini yaptmz 1 ile 100 arasndaki
ift saylarn toplamn bulan uygulamay biraz deitirerek continue ifadesini kullanarak tekrar
yapalm.
5 listBox1.Items.Add(i);
6 }
rneimizi incelediimizde, 3 nolu satrda mod operatr ile saynn ift olup olmad kontrol
ediliyor. Eer say ift deilse 4 nolu satrdaki continue ifadesi ile o satrdan itibaren kod icra
edilmeyip dngye tekrar zorlanyor yani kod 1 nolu satra dallanyor. Bylelikle sadece ift olan
saylar iin 5 nolu kod satr alyor ve ift saylar ListBox kontrolne ekleniyor.
118 Blm 8
while Dngs
C#taki dnglerden bir dieri ise while dngsdr. while dngs bir koul salanyorken dn-
meye devam eder. Koul yanl ( false ) sonucunu verdii zaman ise sonlandrlr. Genel yazm
ekli yledir.
while( koul )
{
yaplacak iler;
}
int toplam = 0;
int sayac = 1;
{
toplam+= sayac;
sayac++;
}
Sonuta toplam deikeni 5050 verecektir. rnekte grld gibi sayac dng ierisinde her
admda 1 arttrlyor. Bylelikle sayac 101 olduunda dng artk sonlandrlyor. Burada koulu-
muz sayac deikeninin deerinin 100 den kk veya eit olmasdr. Koul doru (true) sonu-
cunu verdike dng iletiliyor, koulun yanl (false) deerini vermesi halinde ise dng sonlan-
drlyor.
while dngs bu ekilde srayla yaplacak ilemlerden ziyade problem zmnde bir koulun
durumun snamak iin kullanlr.
Kullanc tarafndan girilen bir saynn ka basamakl olduunu bulmak while dngs iin daha
aklayc bir rnek olacaktr.
5 {
6 basamak++;
7 sayi /= 10;
8 }
9
10 MessageBox.Show(Girdiiniz say + basamak.ToString() +
basamakldr.);
rnekte grld gibi 4 nolu satrda koulumuz sayi deikeninin sfrdan byk olmasdr.
7 nolu satrda ise saynn deeri 10a blp kendisine eitlenir. (Bir sayy sonu 0 oluncaya ka-
dar ka kere 10a blerseniz, o saynn basamak saysn bulursunuz.)
do while Dngs
C#taki bir dier dng de do while dngsdr. for ve while dnglerinden farkl olarak koul
dngnn sonunda kontrol edilir. Bu da do while dngsnn en az bir kere altrlaca anla-
mna gelir.
do
{
yaplacak iler;
} while ( koul );
1den 100e kadar olan saylarn toplamn do while dngs yardmyla bulalm.
int toplam = 0;
int sayac = 0;
do
{
sayac++;
toplam += sayac;
Hatrlarsanz benzer bir rnei while dngs ile yaptk, ancak while dngsndeki koulumuzu
bir hatrlayalm:
do
{
....
} while ( sayac < 100 );
Grld gibi do while dngsnde koulumuz 100den kk olmas aranyor ancak sayac 100
iken bile bir kez alyor ve koul aada olduu iin sayac 100 iken dngden kyor.
120 Blm 8
foreach D ngs
C#ta bir dier dng de foreach dngsdr. foreach, dizi (Array) ve koleksiyon ( collection )
tabanl nesnelerin elemanlar zerinden ilerleyen bir dngdr.
tip: buradaki tip koleksiyonun veri tipi ile ayn veya uyumlu olmak zorundadr.
ekil 8.1
Tablo 8-1
Name Text
Label lblGun Gn:
Label lblAy Ay:
Label lblYil Yil:
ComboBox cmbGun
ComboBox cmbAy
ComboBox cmbYil
Button btnKontrol Geerli Tarih mi?
3. Formun zerinde bo bir yere ift tklayarak kod penceresine gein ve Load olayna gerekli
kodlar yazn.
Dngler 121
4. kinci aamada kullanc btnKontrol adl Buttona tklad anda girdii tarihin geerli bir tarih
olup olmadn kontrol edeceiz. btnKontrola ift tklayarak kod penceresine gein ve Click
olayna gerekli kodlar yazn.
5. Projenizi altrn ve geerli bir tarih girip Buttona basn. Ayn ilemi 31.02.1996 tarihi iin
yeniden deneyiniz.
ekil 8.2
Tablo 8.2
Name Text
CheckedListBox clGazeteler
ListBox lbOkunanlar
Button btnSec >>
clGazeteler adl CheckedListBoxa Milliyet, Hrriyet, Sabah, Radikal, Posta, Fotoma, Fanatik,
Takvim, Tercman elerini ekleyin.
clGazeteler adl kontrolde Ctrl tuuyla biden fazla e seebilmek iin kontroln Properties pane-
line girerek SelectionMode zelliini MultiSimple olarak deitirin.
ekil 8.3
Tablo 8.3
Name Text
TextBox txtKelime
TextBox txtMetin
Button btnAra Ara
Label lblMetin Arama Yaplacak Metin
Label lblKelime Aranacak Kelime
3. btnAraya ift tklayarak kod penceresine gein ve kullancnn txtMetin kontrol ile girdii
deeri metin iinde arayan kodlar yazn.
4. IndexOf metodunun tek parametreli kullanmnda metot Metin ierisinde Kelimenin ilk getii
yerdeki Kelimenin ilk harfinin index numarasn geri dner. rnein Bilge Adam Bilgi Tekno-
lojileri Akademisi metninde Bilgi kelimesini IndexOf methodunu kullanarak ararsak dnen
sonu 11 olacaktr. Herhangi bir metin iindeki karakterlerin index numaras 0 dan balar.
IndexOf metodunun iki parametre alan kullanmnda ise ilk parametre aranacak kelimeyi, ikin-
ci parametre ise arama yapmaya balanacak karakterin index numarasn ifade eder.
IndexOf metodu belirtilen kelimeyi aranan metin iinde bulamazsa geriye -1 dner.
devler
1. For dngs kullanarak arpm tablosu hazrlayn. Sonular ListBox kontrolnde gsterin.
2. Cep telefonlarnn PIN giri ekranna benzer bir form tasarlayn. Kullanc 3 defa PIN numara-
sn hatal girerse Uygulamanz bloke olmutur mesaj verin ve Button kontroln grnmez
yapn. Kullanc 3 deneme hakk iinde doru olarak PIN numarasn girerse Ho geldiniz
mesaj verip formu kapatn.
9 Diziler
9 Diziler
Baz Dizi zellikleri ve Metotlar
devler
Diziler
Deikenleri renirken grdk ki her deikene sadece bir deer atayabiliriz. Baz durumlarda
ayn tipteki deikenleri bir arada tutma ihtiyac duyabiliriz. C# bize ayn tipteki deikenleri tek bir
adla saklayabileceimiz dizileri (Array) sunmaktadr.
boyut: dizide tutulacak eleman says. 5 elemanl tam saylar dizisi tanmlamak istersek:
indeks: dizideki verilere verilen sra numaras. C#ta indeksler sfrdan balar.
rnein 10 kiilik bir snftaki rencilerin notlarn her renci iin bir not deikeni oluturup
tutmak yerine notlar dizisi ierisinde tutabiliriz.
Bu ekilde notlar isminde 10 tane byte deeri tutabilecek bir dizi tanmladk. imdi notlar diziye
aktaralm.
notlar[0] = 50;
notlar[1] = 60;
notlar[2] = 90;
notlar[3] = 40;
notlar[4] = 60;
notlar[5] = 30;
notlar[6] = 40;
notlar[7] = 70;
notlar[8] = 60;
notlar[9] = 100;
128 Blm 9
ekil 9.1
byte ahmetinNotu;
ahmetinNotu = notlar[5];
Btn deerlere tek tek erimek, eer bu deerler bir ka tane ise pek sorun olmayacaktr. Fakat
tmn listelemek istersek bu yntem pek uygun olmayacaktr. Bunun iin foreach dngs kul-
lanlabilir. imdi foreach dngs ile tm elemanlar ListBox ta gsterelim:
Bu ekilde ssl parantezler ierisinde dizinin btn deerleri girilir ve dizinin boyutu da N olur.
byte[] notlar = { 50, 60, 90, 40, 60, 30, 40, 70, 60, 100 };
imdi dizide bulunan notlarn aritmetik ortalamasn alalm. Bunun iin dizideki her eleman genel-
Toplam isimli bir deikene aktaracaz. Sonuta genelToplam dizi mevcuduna blp aritmetik
ortalamay elde edeceiz.
byte[] notlar = { 50, 60, 90, 40, 60, 30, 40, 70, 60, 100 };
int genelToplam = 0;
int ortalama;
{
genelToplam += not;
}
ortalama = genelToplam / notlar.Length;
imdi Blm 4te Veri Tipleri konusunda string hakknda rendiimiz bir cmleyi hatrlayalm:
String bir char dizisidir.
Diziler 129
Dolaysyla string bir ifadeyi foreach ile evirip harflerine teker teker ulaalm. rnek olarak kulla-
ncnn girdii bir ifadeyi tersten yazdralm.
Length
Dizinin saklayabilecei toplam eleman saysn veren zelliktir.
Clear
Parametre olarak verilen dizinin, belirtilen indeks aralndaki tm deerlerini temizler. Temizleme
ileminde atanan deer, dizi elemanlarnn tiplerine gre deiir. rnein int tipinde tanml bir
dizinin elemanlar temizlenirse 0 deerini alacaktr. Buna karn String tipindeki elemanlar (bo
yaz) deerini alr.
Array.Clear(dizi, 1, 2);
MessageBox.Show(dizi[2].ToString());
//Sonu = 0
Reverse
Parametre olarak verilen dizinin eleman srasn tersine evirir. Dizinin tm elemanlarnn veya
belirli indeks aralndaki elemanlarnn sras tersine evrilebilir.
Array.Reverse(harfler);
MessageBox.Show(harfler[2]);
// Sonu = A
130 Blm 9
Sort
Parametre olarak verilen dizinin elemanlarn kkten bye sralar. Eer dizi numerik ise ra-
kamlarn byklne gre, yaz tiplerinde ise ba harflerine gre sralanr. Reversen tersidir.
MessageBox.Show(harfler[2]);
// Sonu = C
IndexOf
lk parametrede verilen dizide, ikinci parametrede verilen deeri arar. Aranan deer dizide bulu-
nursa bulunan elemann indeks deeri, bulunamazsa -1 dndrr.
// Result= 2
Tablo 9.1
Name Text
Label lbl1 1.Sayi
Label lbl2 2.Sayi
Label lbl3 3.Sayi
Label lbl4 4.Sayi
Label lbl5 5.sayi
Label lbl6 6.sayi
Button btnBaslat Balat
ekil 9.2
4. Amacmz btnBaslat adl Buttona tklandnda 1-49 aras 6 farkl sayy Label kontrolleri
aracl ile form zerinde grntlemektir. imdi btnBaslata ift tklayarak kod penceresine
gein ve gerekli kodlar olayna yazn:
5. Uygulamada kullandmz IndexOf metodu ilk parametre olarak ald dizi iinde ikinci para-
metre olarak ald deeri arar ve eer bu deer varsa deerin bulunduu indeksi yoksa -1 i
geri dndrr.
6. Uygulamay altrn ve Label kontrollerinde grnen saylarn birbirinden farkl ve sralanm
bir biimde olduunu gzlemleyin.
132 Blm 9
devler
1. Kullancnn girdii TC.Kimlik numarasnn geerli olup olmadn kontrol eden bir uygulama
hazrlayn. Geerli bir TC.Kimlik numarasnda ilk 10 hanenin toplamnn birler basamandaki
rakam kimlik numarasnn son hanesindeki rakama eit olmaldr.
2. Kullancnn TextBox kontrolne girdii ifreyi belli kriterleri kullanarak zayf, orta veya kuvvetli
ifre olarak tanmlayan bir Windows uygulamas gelitirin.
Kriterler
Metotlar Kullanmak
Parametreler
Metot Overload
devler
Metotlar
Bu blmde birok programlama dilinin olduu gibi C#n da temel kavramlarndan olan metotlar
detaylar ile inceleyeceiz. Metotlarn tanmlar ve kullanm, parametrelerin zellikleri rneklerle
ilenecektir.
Metot Nedir?
Program yazarken belli bir ii yapan kod blounu bir ka kez kullanmak gerekebilir. Bunun iin
ayn kod blounu tekrar yazmak yerine bunu bir metot olarak hazrlarz ve ihtiya duyduumuz
yerde metot ismi ile ararak altrabiliriz. Bu bize daha az kod yazma imkn salayp zaman
kazandrd gibi, olas deiikliklerde de daha az hata yapmamz salar.
Bir muhasebe program yazdmz ve maa hesaplamalarn programmzn birok yerinde kul-
landmz dnelim. Maa hesaplamas yapan kod blounu metot
olarak tanmlayp ilgili yerlerde bu metodu altrarak iimizi kolayca
halledebiliriz.
Metotlar Kullanmak
Baz metotlar geriye deer dndrr, bazlar ise dndrmez. Geriye deer dndrmeden kast
udur: u ana kadar birok rnekte Random snfn kullandnz. Random snfnn Next adl bir
metodu vardr. Bu metot, ardnzda size bir sonu retir ve siz onu programnzda uygun
yerlerde kullanrsnz. Baka bir rnek de MessageBox snfnn Show metodudur. Show size Dia-
logResult cinsinden bir deer dndrr ve siz onu yakalayp ilemlerinizi yaparsnz. Bir metodun
geriye hangi tip deeri dndrecei Visual Studio IntelliSensete kolaylkla grlebilir:
Grld gibi ekil 10.2deki metot DialogResult tipinden, ekil 10.3teki metot ise int tipinden
bir deer dner.
MetodunDneceiTip degiskenAdi;
degiskenAdi=metot;
Bu yap kullanlarak ekil 10.3teki metot, arlmak ve dnen deeri yakalanmak istenirse u
ekilde bir kod yazlabilir:
136 Blm 10
1 nolu satrda daha nceki rneklerden de hatrlayacanz bir rastgele say retici oluturuldu.
2 nolu satrda ise Next metodunun dnd veri tipine sahip bir deiken oluturuldu.
3 nolu satrda ise 2 nolu satrdaki deiken yazlp, eittir iaretinin sa tarafnda metot yazld.
Bylelikle metottan dnen deer bu deikene atand.
ekil 10.4
voidleri kullanmak olduka kolaydr. Tek yaplmas gereken isminin yazlmasdr. rnein bir
TextBoxn ieriini temizlemek iin Clear metodunu altrmaya ihtiya vardr.:
textBox1.Clear();
Parametreler
Parametreler, metotlarn istenilen ilemi yapabilmesi iin kullanc tarafndan deerleri verilmesi
gereken deikenlerdir. Bir metotta istenilen parametrelerin saysna ve bu parametrelerin veri
tiplerine o metodun imzas denir.
rnein Random snfnn Next metodu geriye istenilen aralkta bir rastgele say dndrmek iin
en dk deer ve en yksek deer iin int tipinde iki adet deer bekler.
ekil 10.5
sayi = rastgele.Next(1,101);
Grld gibi bir metot birden fazla parametre alyorsa bu deerler girilirken virgl iareti ile
ayrlr.
Baka bir rnek olarak System.Dignosistics.Process.Start metodu verebilir. ekil 10.6daki gibi bu
metoda IntelliSense ile bakld zaman string veri tipinde bir deer bekledii grlr.
Metotlar 137
ekil 10.6
System.Diagnostics.Process.Start(calc);
ya da
System.Diagnostics.Process.Start(textBox1.Text);
lk olarak verilen bir saynn karesini alan yani o sayy kendisi ile arpan bir metot yapalm. Meto-
dun ad KareAl, geriye dndrecei veri tipi int ve alaca parametre veri tipi de int olsun.
rnekte grld gibi nce fonksiyonun geriye dndrecei veri tipi belirtilir. (int) Daha sonra
metoda isim verilir. (KareAl). Parantezler ierisinde metot ierisine gnderilecek parametrelerin
veri tipi ve ismi belirtilir. (int sayi)
Metot ierisinde gerekli ilemler yapldktan sonra geriye deer dndrebilmek iin return ifadesi-
ni kullanlr. Eer return ifadesi yazlmazsa veya her durumda almayacak bir ekilde yazlrsa
(mesela bir if blou ierisine) uygulama hata verir ve derlenmez. return ifadesi metodun alma-
sn durdurur ve sandaki deeri geriye dndrr.
138 Blm 10
void Temizle()
{
textBox1.Clear();
textBox2.Clear();
comboBox1.Items.Clear();
}
lk olarak metodun bir deer dndrmediini belirtmek iin void kelimesi kullanlr. Sonra metoda
isim verilir. Daha sonra parantezler ierisine parametreler yazlr. (Bu rnekte metodun paramet-
reye ihtiyac yoktur)
voidlerde, geri deer dnen metotlardan farkl olarak return ifadesi kullanmak zorunlu deildir.
Ancak istenilirse kullanlabilir. Return ifadesi voidlerde metottan kmak iin kullanlr.
Metot tanmlarken dikkat etmeniz gereken bir dier konu da, metotlarn sadece kendi ilerini yapa-
cak ekilde tasarlamak olacaktr. Yani bir metoda hem toplama ilemi hem de sonucu TextBoxa
yazdrma grevi vermemek gerekir. Bu durum metodun kullanl olmasn engeller. rnein:
5 return toplam;
6 }
4 nolu satr metodu txtToplam adl TextBox kontrolne baml hale getirdiinden fonksiyonel
olma zelliini kaybetmitir.
Metot Overload
Methot Overload (metotlar ar ykleme), bir metodun birden fazla, farkl imza ile tanmlanmas-
dr. Daha farkl bir anlatmla ayn isimli metodun birden fazla farkl parametre imzas almasdr.
Metotlar 139
Gncel hayattan bir rnek ile konuyu aalm. Biri size Benim doum tarihim 6.5.1980. Ben ka
yandaym? diye sorabilir. Ayn soru Benim doum ylm 1980. Ben ka yandaym? olarak da
sorulabilir. Aslnda burada iki farkl hesaplama sz konusudur. Birincisinde gnmzdeki yldan
verilen deerdeki yl bulunarak kartlr. kincisinde ise gnmzdeki yldan dorudan verilen de-
er kartlr. Bu iki farkl hesaplama dolays ile iki farkl metot gerektirir. Bu metotlar kod olarak
yazmak istersek u ekilde yazabiliriz:
Ancak grld gibi bu iki metodun da amac ayndr: Ya Hesaplamak! C#, parametrelerin im-
zas ayr olduu srece birden fazla metoda ayn ismi verme olanan tanr.
Artk sadece YasHesapla ismi kullanlarak iki metot da arlabilir. Eer metoda DateTime tipinde
bir deer gnderirseniz ilk metot, int veri tipinde deer gnderirseniz ikinci metot alacaktr. Vi-
sual Studioda bir metodun ka overloadu olduu grlebilir. Ayrca bu metodun overloadlarnn
istedii imzalar IntelliSensede aa-yukar ok tular ile gezilebilir.
140 Blm 10
ekil 10.10
MessageBoxn kullanmn hatrlayn. Bazen sadece ekranda mesaj olarak grnmesi gereken
metni verirken, bazen metnin yannda pencere baln, bazen pencerede gzkecek ikonu,
bazen de Yes-No, OK gibi gsterilecek dmeleri veriyoruz. Aslnda bunlarn hepsi ayr ayr me-
totlardr. Eer MessageBoxn Show metodunda overload kullanlmasayd,
MessageBox.SadeceMetinGoster(Merhaba Dnya);
MessageBox.MetinVeBaslikGoster(Merhaba Dnya,lk Programmm);
MessageBox.MetinBaslikVeDugmeGoster(Merhaba Dnya,lk
Programmm, Buttons.YesNo);
gibi kargaaya yol aan bir ok metot kullanlacakt. Oysa overload sayesinde sadece Show me-
todunu kullanp parametrelerini deitiriyoruz.
ekil 10.11
Tablo 10.1
Name Text
Label lblSayi1 lk Sayi
Label lblSayi kinci Sayi
Label lblIslem lem
TextBox txtSayi1
TextBox txtSayi2
ComboBox cmbIslem
Button btnIslemYap lem Yap
Metotlar 141
3. ncelikle btnIslemYapa tklandnda kullanlacak bir metot hazrlayn. Kod penceresine ge-
in ve gerekli kodlar yazn.
4. btnIslemYapa ift tklayn ve kod penceresine geerek btnIslemYapn Click olayna gerekli
kodlar yazn.
try
{
IslemYap(Convert.ToInt32(txtSayi1.Text), Convert.
ToInt32(txtSayi2.Text), cmbIslem.Text);
}
//Islem Yap metodunun bir hata ile karlamas durumunda
(Kullancnn herhangi bir TextBox kontroln bo gemesi veya bu
kontrollere say haricinde veri girmesi) uyar verin.
catch (Exception)
{
MessageBox.Show(Veri uyumuyor);
}
}
}
1. Yeni bir Windows projesi oluturun ve ismini TextBoxTemizle olarak deitirin. Formun g-
rnm ekil 10.12deki gibi olmaldr.
ekil 10.12
Tablo 10.2
TextBox txt1 1.Textbox
TextBox txt2 2.Textbox
TextBox txt3 3.Textbox
TextBox txt4 4.TextBox
Button btnTemizle Temizle
3. Kod penceresine geerek TextBoxTemizle adl metot iin gerekli kodlar yazn.
4. btnTemizle ift tkland zaman textBoxTemizle adl metodu arn. btnTemizleye ift tkla-
yn ve kod penceresinde btnTemizlenin Click olayna gerekli kodlar yazn.
Tablo 10.3
Name Text
Button btnTest Test Et
TextBox txtGirilen -
Bu metot parametre olarak ald deeri try blou ierisinde sayya dntrmeye altrmak-
tadr. Eer olumlu sonu alrsa true deer dnecektir. Bu deeri sayya dntremezse catch
blou alacak ve false deer dnecektir.
4. imdi btnTest isimli Button un zerine ift tklayarak kod penceresine gein ve btnTest in
Click olayna gerekli kodlar ekleyin:
144 Blm 10
if yaps ierisinde koul olarak NumberTest metodu arlmaktadr. Eer bu metottan dnen
deer true ise Say girildi.. mesaj grntlenecektir. Eer bu metottan dnen deer false ise
Say girilmedi! mesaj grntlenecektir.
devler
1. Girilen say dizisindeki tek saylar, ayr bir dizide sralayan uygulamay yazn.
2. Bir TextBoxa say girilirken, girilen sayy basamaklara ayran ve aralarna nokta koyan
uygulamay yazn. (basamaklar er er ayrlacak ve aralarna nokta konulacaktr. Bu ilem
rakamlar girilirken yaplacaktr.)
3. Dviz kurlarna gre, girilen cret miktarn Trk Liras(YTL), Euro() ve Dolar($)a eviren
uygulamay yazn.
11
String Math
DateTime
Metotlar
11 String Math Date-
Time Metotlar
String
ToCharArray
Math
DateTime
IsLeapYear
devler
String Math DateTime Metotlar
Bu blmde .NET Framework ierisinde en sk kullanlan metotlar inceleyeceiz. Bu metotlar
ana blmde ele alacaz. Karakter tabanl ilemler iin String, matematiksel ilemler iin Math
ve tarih ile ilgili ilemler iin de DateTime balklar altnda metotlar tek tek aklayp rneklendi-
receiz.
String
Compare
Compare metodu iki string ifadeyi karlatrmak iin kullanlr. lk parametre deeri ikinci para-
metre deerinden byk ise 1, kk ise -1 deerler eit ise 0 dndrr.
Tanm:
rnek:
Contains
Contains metodu, string ifadeler iinde arama yapmak iin kullanlr. Parametre olarak verilen
string deer Contains metodunu aran string deer iinde mevcut ise geriye true, deilse false
dndrr.
Tanm:
rnek:
StartsWith - EndsWith
EndsWith, string ifadeler iinde arama yapmak iin kullanlan baka bir metottur. Metodu aran
string deer parametre olarak verilen string deer ile bitiyor ise geriye true, bitmiyor ise false dn-
drr. StartsWith metodu ile de parametre olarak verilen string deer ile balayp balamadn
renebilirsiniz.
Tanm:
rnek:
IndexOf
IndexOf, string ifadeler iinde arama yapmak iin en ok kullanlan metottur. Metodu aran
string deer parametre olarak verilen string deeri ieriyor ise ilk konumun indeksini, iermiyor
ise -1 dndrr.
Tanm:
rnek:
Insert
Insert metodu string deerlere belirtilen indeksten itibaren parametre olarak verilen string deer-
ler eklemek iin kullanlr. Elde edilen string deer geri dner.
Tanm:
rnek:
Join
Join metodu string dizilerini birletirmek iin kullanlr. lk parametre deeri ile ikinci parametre
deeri olarak verilen string dizisindeki elemanlar birletirir. Geriye elde edilen string deer dner.
Bu metodun tam tersi Splittir.
Tanm:
PadLeft - PadRight
Bir string deer soldan ya da sadan yeni deerler eklemek iin PadLeft ve PadRight metotlar
kullanlr. lk parametre deeri metodu aran string deerin toplam uzunluuna eit olana kadar
ikinci parametrede verilen karakter deerini ekler.
Tanm:
rnek:
string kelime = 7;
sonuc = kelime.PadLeft(2,0);
//sonuc = 07
Remove
Remove metodu ile string bir deerin belirli bir blmn karabilirsiniz. lk parametre deeri
balang indeksini ikinci parametre deeri ise ka karakter karlacan belirtir.
150 Blm 11
Tanm:
rnek:
Replace
Replace metodunu kullanarak string bir ifadenin belli bir parasn deitirebilirsiniz. lk parametre
deeri deiecek paray ikinci parametre deeri ise yerine geecek paray ifade eder. Elde
edilen deer geri dner.
Tanm:
rnek:
string ilem = 1 + 5 = 6;
ilem = ilem.Replace(1, Bir);
ilem = ilem.Replace(+, art);
ilem = ilem.Replace(5, be);
ilem = ilem.Replace(=, eittir);
ilem = ilem.Replace(6, alt);
//ilem = Bir art be eittir alt
Split
Split metodu, bir string deeri, parametre olarak verilen karakter ile blmek iin kullanlr. Geriye
string dizisi dner.
Tanm:
rnek:
Substring
Substring metodu ile string bir deerin belirtilen bir parasn elde edebilirsiniz.
Tanm:
rnek:
ToCharArray
ToCharArray metodu, aran string deerin karakter dizisini dner.
Tanm:
char[] ToCharArray()
rnek:
ToLower
ToLower metodu ile bir string deerin tm karakterlerini kk harfe evirebilirsiniz.
Tanm:
string ToLower()
rnek:
ToUpper
ToUpper metodu ile bir string deerin tm karakterlerini byk harfe evirebilirsiniz.
Tanm:
string ToUpper()
rnek:
Tanm:
string Trim()
rnek:
kelime = kelime.TrimStart();
//kelime = Bilgedadam
kelime = kelime.TrimEnd();
//kelime = Bilgedadam
Math
Ceiling
Ceiling metodu ile parametre deeri olarak verilen ondalkl say yukar yuvarlanarak tam sayya
evrilir.
Tanm:
rnek:
Floor
Floor metodu ile parametre deeri olarak verilen ondalkl say aa yuvarlanarak tam sayya
evrilir.
Tanm:
rnek:
Max
Max metodu ile parametre deeri olarak verilen iki saydan byk olan elde edilir. Tm say tip-
lerinde kullanlabilir.
Tanm:
rnek:
Min
Min metodu ile parametre deeri olarak verilen iki saydan kk olan elde edilir. Tm say tiple-
rinde kullanlabilir.
Tanm:
rnek:
Pow
Pow metodu ile bir saynn kuvveti elde edilir. lk parametre deeri olarak verilen saynn ikinci
parametre olarak verilen sayya olan kuvveti geriye dner.
Tanm:
rnek:
Double sayi = 9;
Double sonuc = Math.Pow(sayi, 2);
//sonuc = 81
Round
Round metodu ile parametre olarak verilen ondalkl sayy en yakn sayya yuvarlar.
Tanm:
rnek:
Sqrt
Sqrt metodu ile parametre deeri olarak verilen saynn karekk geri dner.
Tanm:
rnek:
Double sayi = 9;
Double sonuc = Math.Sqrt(sayi);
//sonuc = 3
DateTime
AddX
AddX metotlar ile parametre olarak verilen say deer, metodu aran tarihe eklenir.
X yerine kullanlabilecek deerler:
Years (Yl), Months (Ay), Days (Gn), Hours (Saat), Minutes (Dakika), Seconds (Saniye)
ve MiliSeconds (Milisaniye).
Tanm:
rnek:
//10.11.2007
DateTime bugun = DateTime.Now;
DateTime BesGunSonrakiTarih = bugun.AddDays(5);
//sonu 15.11.2007
niz.
Tanm:
rnek:
IsLeapYear
IsLeapYear metodu ile parametre olarak verilen 4 haneli yl deeri, artk yl ise geriye true, deilse
false dner.
Tanm:
rnek:
Subtract
Substract metodu ile iki tarih arasndaki fark bulabilirsiniz.
Tanm:
rnek:
// 5.4.1976
DateTime tarih1 = new DateTime(1976, 4, 5);
//bugn 10.11.2007
156 Blm 11
ekil 11.1
Tablo 11.1
Name Text
TextBox txtDogumTarih
Label label1 Doduunuz Gn:
Label label2 Yaadnz Gn Says:
Button btnHesapla Hesapla
Label lblDogumGunu
Label lblYasananGun
Label label3 Doum Tarihi:
3. btnHesaplaya ift tklayarak kod penceresine gein ve btnHesaplann Click olayna gerekli
kodlar yazn.
try
{
//txtDogumTarihe girilen deeri Datetime trne evirerek
deikene eitleyin
dogumTarih = Convert.ToDateTime(txtDogumTarih.Text);
}
catch (Exception)
{
//Hatal bir tarih girilirse uyar verin.
MessageBox.Show(Geerli bir tarih giriniz.);
return;
String Math DateTime Metotlar 157
string ingilizceGunAdi;
ekil 11.2
Tablo 11.2
Name Text Interval
Button btnBaslat Balat -
Button btnDurdur Durdur -
Timer timer1 - 500
string yazi = C S H A R P ;
4. imdi Form1 in zerine ift tklayarak kod penceresine gein ve Form1in Load olayna ge-
rekli kodlar ekleyin:
5. imdi btnBaslat isimli Buttonun zerine ift tklayarak kod penceresine gein ve btnBaslatin
Click olayna gerekli kodlar ekleyin:
6. imdi btnDurdur isimli Buttonun zerine ift tklayarak kod penceresine gein ve btnDurdurun
Click olayna gerekli kodlar ekleyin:
7. imdi timer1 isimli Timern zerine ift tklayarak kod penceresine gein ve timer1in Tick
olayna gerekli kodlar ekleyin:
Bu kod kelimemizin ilk harfini bir deiken ierisine kaydettikten sonra kelimemizin ilk harfini
silerek 1 karakter ksaltr. Daha sonra deiken ierisindeki bu harfi kelimenin sonuna ekleyerek
kayma efektini gerekletirir.
1. Yeni bir Windows projesi an ve ismini TersKelime olarak deitirin. Form grnts ekil
11.03teki gibi olmaldr.
ekil 11.3
Tablo 11.3
Name Text
TextBox txtKelime
Label lblKelime Kelime:
Label lblSonuc Girdiiniz Kelimenin Tersi:
Button btnTersineCevir Tersine evir
3. btnTersCevire ift tklayarak kod penceresine gein ve btnTersCevirin Click olayna gerekli
kodlar yazn.
160 Blm 11
ekil 11.4
Tablo 11.4
Name Text
TextBox txtMetin
Label lblMetin Metin Giriniz:
Button btnCevir evir
Label lblSonuc Sonuc:
3. btnCevire ift tklayarak kod penceresine gein ve btnCevirin Click olayna gerekli kodlar
yazn.
string sonuc=;
4. Uygulamay altrn ve txtMetine deer girerek test edin. alan uygulamann ekran grn-
ts ekil 11.05teki gibidir.
ekil 11.5
162 Blm 11
1. Yeni bir Windows projesi an ve ismini MethodCalismaSuresi olarak deitirin. Form grn-
tnz ekil 11.06daki gibi olmaldr.
ekil 11.6
Tablo 11.5
Button btnCalistir altr
ListBox lsAsalSayi
Label lblBaslangic Balama Zaman:
Label lblBitis Biti Zaman:
Label lblSure alma Sresi :
4. btnCalistira ift tklayarak kod penceresine gein ve btnCalistirin Click olayna gerekli kodlar
yazn.
ekil 11.7
164 Blm 11
devler
1. Temel olarak 4 ilem yapabilen (Daha fazla ilem yaptrabilirsiniz) hesap makinesi uygulama-
s gelitirin.
2. Finans sektr iin uygulama gelitiren yazlm takmnda yer alyorsunuz. Gnlk kurlarn
takip edildii modl yazmanz gerekiyor. Modldeki ama ondalk ksm 6 haneli elde dilen
dviz deerlerini ekranda yuvarlanm ve ondalk ksm 2 hane olarak gstermek
A
.NET Framework
MSIL CLR
Kavramlar
A .NET Framework MSIL
CLR Kavramlar
.NET Framework Nedir ?
Platform kelimesini mercek altna aldmzda ise .NET Framework n bir programlama dili ol-
madn, ierisinde eitli amalar iin gelitirilmi birok aracn bulunduu bir paket olarak de-
erlendirebiliriz.
Temel olarak .NET Framework ; CLS, CTS ve CLR olarak 3 ana aratan oluur. u an iin bu
aralardan sadece CLRn biliniyor olmas sizin iin yeterli olacaktr. CLRn ne olduu konusunda
bilgi sahibi olmadan nce .NET Frameworkn nasl dilden bamsz bir yaps olduu hakknda
bilgi sahibi olalm.
.NET Framework kitap ierisinde de bahsedildii zere 50den fazla dili desteklemektedir. Peki,
bu kadar dil, ortak bir noktada nasl buluabilmektedir? te bu noktada karmza Microsoft ta-
rafndan gelitirilen, 50den fazla dilin derleme aamasnda otomatik olarak dntrld, orta
seviyeli bir dil olan MSIL (Microsoft Intermediate Language) karmza kmaktadr. .Net Fra-
mework uyumlu dillerin derleyicileri, derleme ilemi esnasnda eer kod ierisinde herhangi bir
problem ile karlamaz ise kullanlan uygulama gelitirme dilinin kodlarn MSIL ad verilen ortak
bir dile evirmektedir.
Konunun daha rahat anlalabilmesi asndan ekil A.1 sizlere yardmc olacaktr.
ekil A.1
168 Ek-A
Yazlan kodlar derleyici tarafndan nce MSILe dntrlmekte, daha sonra bu orta seviyeli kod
hangi platform zerinde altrlyor ise o platforma uygun makine diline evrilmektedir. Peki, bu
noktada platforma uygun makine diline evirim ilemi nasl gereklemektedir? Bu hangi ara ile
salanmaktadr? Temel yaklamla bakldnda bu noktada karmza CLR (Common Language
Runtime) isimli ara kmaktadr. CLR alma annda MSIL kodlarn belirli kurallar erevesinde
makine diline evirmekte ve uygulama altrlacak hale getirilmektedir.
Eitim sreci ierisinde sz getii zere Microsoft tarafndan gelitirilmi, .Net Framework ad
verilen yaklak 25 MBlk bir ykleme paketi bulunmaktadr. .Net Framework ile gelitirilen bir
uygulamann dier bir makinede (rn: Arkadanzn makinesi, annenizin Notebooku, halanzn
Surface PCsi v.b.) altrlabilmesi iin minimum yaklamla bu paketin sistem zerine kurulu
olmu olmas gerekmektedir. Bu paketin yklemesi sonucunda sisteminize .NET Framework ile
gelitirilen bir uygulamann altrlabilmesi iin gereken temel aralar sisteme kurulacaktr.
using System;
public static class CSharpCompiler
{
public static void Main(string [] Args)
{
Console.WriteLine(Merhaba Dnya !);
Console.ReadLine();
}
}
csc c:\Kodlar.txt
Ekran zerinde herhangi bir hata kmam ise uygulamamz derlenmi; kodlarnz altrlmak
zere MSIL kodlarna dntrlm demektir.
Uygulamay C:\Program Files\Microsoft Visual Studio 9.0\VC dizini altnda EXE yani Executable
(altrlabilir) formatta bulabilirsiniz.
ekil A.2
Bu blmde derleme ilemi iin normal artlarda VS.NETe ihtiyacmzn olmadn ama mantkl
bir yaklamla bakldnda VS.NET kullanmamann ne kadar da zor olduu ile ilgili bilgi sahibi
olmu olduk.
rneimizi gelitirmeye gemeden nce bir ykleme paketinin neden oluturulmas gerektii ile
ilgili temel olarak bilgi sahibi olalm.
rnein gelitirmi olduumuz bir kart oyununu MSN zerinden bir arkadamza gndererek
uygulamay arkadamz ile paylamak isteyebiliriz. Peki, bu noktada ne tip problemler ile kar-
laabiliriz?
ncelikle karlaabilecek olduumuz en temel problem; uygulamann .Net Framework ile geli-
tirilmi olmasndan dolay uygulamay gnderiyor olduumuz kiinin makinesinde bu kurulumun
gerekletirilmi olmasnn gerekliliidir. Bu kontrol ancak ve ancak uygulamay gnderiyor ol-
duumuz kiiye sorarak gerekletirebiliriz.
Bir dier yaanabilecek problem ise uygulama ile birlikte birden fazla dosyann bulunmasnn
gerektii durumlarda dosyalar tek tek gndermek, tek tek gnderilse bile bunlarn ilgili klasrlere
tek tek kopyalanmasn salamak kolay bir i deildir.
Peki, tm bu problemlere zm olabilecek yapda, hemen hemen internet zerinden indirmi ol-
duumuz tm uygulamalarn ilk altrlma srecinde karmza kan bir ykleme paketi modeli
zerinden ilerlesek hem bizim amzdan hem de uygulamay gnderdiimiz kii asndan daha
uygun olmaz myd?
te bu noktada karmza VS.NET zerinde hazr tanml olan Setup Projesi ablonlar kmak-
tadr. Bu ablonlar yardmyla birka tklama ile uygulamalarmza ykleme paketi oluturabilir,
yklenecek olan makinede yaplmas gereken tm ilemleri bu paket ierisinde tanmlayabiliriz.
Ykleme paketinin bir dier avantaj ise uygulamann yklenecek olduu sistemde .Net Fra-
mework kontroln yapmas, ayet yok ise kiiyi ilgili Download sayfasna ynlendirmesidir.
VS.NET i atktan sonra File > New > Project penceresinden ekildeki proje ablonunu seiyoruz.
ekil A.3
ekil A.4
kan sihirbaz penceresinde Create a setup for a Windows Application seeneini seelim.
Ek-A 171
ekil A.5
Next dmesine tkladktan sonra Setup paketi ierisinde hangi dosyalarn bulunacan seme-
mizi isteyecek olan bir sihirbaz penceresi karmza gelmektedir.
ekil A.6
172 Ek-A
Add dmesine tklayarak sistemimiz zerinde bulunan uygulamamz seiyoruz ve Next dme-
sine tklyoruz.
ekil A.7
ekil A.8
Setup paketimiz hazr. Hazrlanan ykleme dosyasn projeyi atmz uygulama klasr ierisin-
de .msi uzantl olarak bulabiliriz.
ekil A.9
Ek-A 173
Bilindii zere MSDN Yardm ktphanesinin bilgisayarmz zerinde yaplacak ykleme sonras
kaplayaca alan en az 3-4GB olacaktr.
Ktphanenin boyutunun bu kadar byk olmasnn yan sra ktphane evrimd bir model
zerinden altndan gerekli gncellemelerinin internet zerinden srekli yaplmas gerekmek-
tedir.
nternet eriiminin olduu evrimd paketi yklemenin hi bir gerei yoktur. Ayn sonuca daha
gncel bir ekilde internet zerinden eriebiliriz.
Hzl bir ekilde konuyu rneklendirmemiz gerekirse, Bitmap snfnn nasl kullanlaca ile ilgili bir
MSDN aramas gerekletirelim ve sonucunu birlikte deerlendirelim.
nternet eriiminin olduu bir ortamda taraycmzn adres ubuuna ekil A.10daki adresi yaza-
lm.
ekil A.10
Sol st kedeki arama kutusuna Bitmap deerini yazarak Enter tuuna basalm ve kan sonu-
lardan ilkine tklayalm.
ekil A.11
174 Ek-A
kan sayfa ierisinde snfn yapsn inceleyelim. Uygun olan kod blounu deerlendirdikten
sonra rnek kodu denemek iin VS.NET ierisine alan bir projeye kodu yaptralm ve uygula-
may altralm.
ekil A.12
ekil A.13
Bu dntrme ilemi esnasnda ToString metodunun Numeric Format String parametresi ze-
rinden dntrme ilemi farkl ihtiyalar dorultusunda kiiselletirilebilmektedir.
Bilgilendirmeye gemeden nce parametrenin temel kullanmn incelemek daha doru olacak-
tr.
{N:FormatString,M}
Bu noktada sembolik olarak ifade edilen deerlerden N, parametrenin indeks deerini, FormatS-
tring saynn nasl grntleneceini, M ise alann uzunluunu temsil etmektedir.
Tablo A.1
Kullanlan Karakter Anlam
Numerik deer, lokal sistemin kullanyor olduu
C para birimi format zerinden dntrmeye
sokulur.
ekil A.14
IntelliSense
C# (csharp) yaps itibariyle yazm kolay olmayan bir dildir. Bu sebepten dolay bu dili ilk defa
renecek olanlar iin hata ou zaman kanlmaz olmaktadr. Burada sz edilen hatalar ya-
zm (syntax) hatalardr. Bu hatalar en aza indirmek iin Visual Studio arayz bize IntelliSense
yazm yardmcsn sunmaktadr. Bu yardmcy iyi kullandnz takdirde hatalarn en aza indiini
greceksiniz.
Kod yazarken, ilk harfe basmanzla beraber devreye giren IntelliSense yardmc size o scope
ierisinde yazlabilecek deiken, metot, zellik gibi eleri listeler. Yazmak istediiniz e seili
hale geldiinde devamn yazmanz gerekmez. Bu durumda yapmanz gereken en mantkl adm
bir sonraki yazmak istediiniz karakteri tulamak olacaktr. rnein TextBox kontrolnn Text
zelliine metinsel bir deer atayan kodu yazacaksnz.
t ve x harflerine basn hemen ardndan txtAdn geldiini greceksiniz. imdi yapmanz gereken
nokta . ya basmak. IntelliSense burada eksik olan ksm tamamlayacak ve noktadan sonra ge-
lecek dier kodlar listeleyecektir. Tekrar T harfine basn
IntelliSense i herhangi bir scope iinde kod TabIndex gelecek aa ok tuu ile ilerleyip Texti bulun
yazmadan aktif hale getirmek iin Ctrl + Bo-
luk tu kombinasyonunu kullanabilirsiniz.
ve eit (=) tuuna basp bir boluk verin. Bundan sonra
ift trnak iine metinsel ifade yi yazn.
Sk Yaplan Hatalar
1. C# ta satrlar mutlaka noktal virgl (;) ile bitmelidir.
Yanl
Doru
2. Bir atama ilemi yaplyorsa eittir (=), karlatrma yaplyorsa ift eittir (==) kullanlmal-
dr.
Yanl
if(a = 10)
Doru
if(a == 10)
3. Karmak bir aritmetik ilem yaplyorsa parantezler ile ncelik sras belirtmek gerekir.
Yanl
Doru
4. Metotlar a kapa patantez () ile kullanlr. Eit (=) ile deer veremezsiniz. Sadece parametre-
ler aracl ile deer geirebilirsiniz.
Yanl
Math.Round = 90;
Math.Round() = 90;
Doru
Math.Round(90);
5. Eer bir metot geriye deer dndrecek ise mutlaka return ile uygun tipteki deer dndrl-
melidir.
Yanl
Doru
void metod1();
{
}
Doru
void metod1()
{
}
7. for, foreach ve while dngleri ile if, switch deyimlerini tanmlarken noktal virgl (;) kullanl-
maz. Sadece do while dngsnden sonra kullanlr.
Yanl
for(int i = 0;i<=10;i++);
{
}
while(true);
{
}
Doru
for(int i = 0;i<=10;i++)
{
}
while(true)
{
}
do
{
}while(true);