HERKES N C#
2 KISIM I C# DL
KISIM I C# DL
BLM 1: C#'IN DOUU
C# Aile Aac ... C: Modern Programlama ann Balangc . Nesne Ynelimli Programlamann ve C++'n Douu ... nternet ve Java'nn Gelii .. C#' n Douu ..
C# ile .NET Framework Arasndaki Balant .. .NET Framework Nedir? .
Common Language Runtime Nasl alr? ... Kontrol Altna Alnan ve Alnmayan Kodlar .
Common Language Specification .
BLM 2: C#'A GENEL BR BAKI ...
Nesne Ynelimli Programlama . likili Verilerin Paketlenmesi . ok Biimlilik Kaltm ...
lk Basit Program . C# Komut Satr Derleyicisini (csc.exe) Kullanmak Visual Studio IDE'yi Kullanmak . Satr Satr lk rnek Program
Sz Dizimi Hatalarn Kontrol Altna Almak . Kk Bir Deiiklik kinci Basit Program Baka Bir Veri Tipi .. ki Kontrol fadesi .
if fadesi . for Dngs ..
Kod Bloklarn Kullanmak ... Noktal Virgller ve Konumlandrma . Girintileme Altrmalar ..
C# Anahtar Kelimeleri . Tanmlayclar .. C# Snf Ktphaneleri ...
BLM 3: VER TPLER, LTERALLER VE DEKENLER
Veri Tipleri Neden nemlidir? ... C#'n Deer Tipleri .. Tamsaylar decimal Tipi .. Karakterler bool Tipi Baz kt Seenekleri Literaller
Onaltlk Literaller . Karakter Ka Sekanslar ............ Karakter Katar Literalleri
13
14
14 15 16 17 18 19 19 20 20
21
22 23 23 24 25 25 26 30 33 34 35 37 39 39 40 42 43 44 45 45 46
47
48 48 49 53 54 55 56 59 60 61 62
NDEKLER
HERKES N C#
3
Deikenlere Yakndan Bir Bak . Bir Deikene lk Deer Atamak ... Dinamik lk Deer Atamas
Deikenlerin Kapsam ve Yaam Sreleri . Tip Dnmleri ve Tip Atamalar
Otomatik Dnmler . Uyumsuz Tiplerin Atamalar ..
Deyimlerde Tip Dnmleri . Deyimlerde Tip Atamas Kullanmak .
BLM 4: OPERATRLER ..
Aritmetik Operatrler .. Artrma ve Eksiltme .
likisel ve Mantksal Operatrler .. Ksa Devre Mantksal Operatrler
Atama Operatr . Bileik Atamalar ...
Bit Tabanl Operatrler ... Bit Tabanl VE, VEYA, XOR ve DEL Operatrleri ... Kaydrma Operatrleri .. Bit Tabanl Bileik Atamalar
? Operatr .. Boluklar ve Parantezler Operatrlerin ncelik Sras ..
BLM 5: PROGRAM KONTROL FADELER ..
if ifadesi . Kmelenmi if'ler . if-else-if Merdiveni ...
switch fadesi Kmelenmi switch fadeleri ..
for Dngs .. for Dngs zerinde Baz Varyasyonlar ...
while Dngs . do-while Dngs foreach Dngs . Dngden kmak in break Kullanmak continue fadesini Kullanmak .
return . goto
BLM 6: SINIFLARA, NESNELERE VE METOTLARA GR .
Snflarn Temel zellikleri . Snfn Genel Biimi . Snf Tanmlamak ...
Nesneler Nasl Oluturulur? .. Referans Deikenleri ve Atama .. Metotlar .
Building Snfna Bir Metot Eklemek .
63 64 64 65 68 69 70 72 74
77 78 79 82 85 87 87 88 88 94 97 97 99 99
101
102 103 104 105 109 109 112 117 119 120 120 123 123 124
127 128 128 129 134 135 135 136
HERKES N C#
4 KISIM I C# DL
Metottan Dn Bir Deer Dndrmek . Parametre Kullanmak . Building'e Parametreli Bir Metot Eklemek Eriilemeyen Kodlar nlemek ..
Yaplandrclar . Parametreli Yaplandrclar ... Building Snfna Bir Yaplandrc Eklemek .
new Operatrne Tekrar Bir Bak ... new'u Deer Tipleriyle Birlikte Kullanmak
Anlamsz Verilerin Toplanmas ve Yok ediciler .. Yok Ediciler ..
this Anahtar Kelimesi ..
BLM 7: DZLER VE KARAKTER KATARLARI
Diziler Tek Boyutlu Diziler .. Diziyi lk Kullanma Hazrlamak . Snrlar Zorlanr
ok Boyutlu Diziler .. ki Boyutlu Diziler . veya Daha Fazla Boyutlu Diziler . ok Boyutlu Dizileri ilk Kullanma Hazrlamak
Dzensiz Diziler ... Dizi Referanslarn Atamak Length zelliini Kullanmak ..
Dzensiz Dizilerde Length Kullanmak . foreach Dngs . Karakter Katarlar
Karakter Katarlarn Oluturmak Karakter Katarlar zerinde ilem Yapmak . Karakter Katar Dizileri Karakter Katarlar Deimez . Karakter Katarlar switch ifadelerinde Kullanlabilir
BLM 8: METOT VE SINIFLARA DAHA YAKINDAN BR BAKI ..
Snf yelerine Eriimi Kontrol Etmek .. C# ' ta Eriim Belirleyicileri . Public ve Private Eriimi Uygulamak Eriimi Kontrol Altna Almak: Bir rnek alma
Metotlara Nesne Aktarmak Argmanlar Nasl Aktarlr?
ref ve out Parametrelerini Kullanmak ... ref Kullanmak ... out Kullanmak .. Referans Parametrelerinde ref ve out Kullanmak ..
Deien Sayda Argman Kullanmak .. Nesneleri Dndrmek .
Bir Diziyi Dndrmek .. Metotlarn An Yklenmesi ... Yaplandrclar Ar Yklemek
139 140 142 145 146 147 148 149 150 151 152 152 154
157
158
158 161 162 162 162 164 165 166 168 169 172 173 177 177 178 181 182 184
185
186 186 188 189 194 195 198 198 200 202 204 207 209 210 216
NDEKLER
HERKES N C#
5
this Araclyla Ar Yklenmi Bir Yaplandrcy armak . Main() Metodu ..
Main()'den Deer Dndrmek ... Main()'e Argman Aktarmak ..
Yinelenme . static'i Anlamak
static Yaplandrclar ..
BLM 9: OPERATRLERN AIRI YKLENMES ..
Operatrlerin Ar Yklenmesiyle lgili Temel Kavramlar kili Operatrleri Ar Yklemek Tekli Operatrleri Ar Yklemek .
Standart C# Tipleri zerindeki lemleri Kontrol Altna Almak . likisel Operatrleri Ar Yklemek true ve false' Ar Yklemek Mantksal Operatrleri Ar Yklemek
Mantksal Operatrlerin Ar Yklenmesine Basit Bir Yaklam . Ksa Devre Operatrleri Mmkn Klmak
Dnm Operatrleri Operatrleri Ar Yklemekle ilgili pular ve Kstlamalar .. Operatrlerin Ar Yklenmesine Bir Baka rnek ..
BLM 10: NDEKSLEYCLER VE ZELLKLER .
ndeksleyiciler .. Tek Boyutlu indeksleyici Oluturmak ndeksleyiciler Ar Yklenebilir ndeksleyiciler, Temel Niteliinde Bir Dizi Gerektirmez . ok Boyutlu ndeksleyiciler
zellikler ... zelliklerle lgili Kstlamalar ..
ndeksleyiciler ve zelliklerin Kullanm ..
BLM 11: KALITIM
Kaltmn Temel Unsurlar .. ye Eriimi ve Kaltm
protected Eriim Kullanm . Yaplandrclar ve Kaltm ..
Temel Snfn Yaplandrclarn armak . Kaltm ve isim Gizleme ..
Gizli Bir isme Erimek in base Kullanm . ok Katmanl Hiyerari Oluturmak . Yaplandrclar Ne Zaman arlr? Temel Snf Referanslar ve Tretilmi Nesneler ... Sanal Metotlar ve Devre D Brakma (Overriding) ..
Devre D Braklan Metotlara Neden Gerek Var? Sanal Metotlar Uygulamak ..
zet Snflarn Kullanm Kaltm nlemek in sealed Kullanmak . object Snf ..
220 221 221 222 224 227 232
234 235 236 238 242 246 248 251 251 253 257 262 263
268 269 269 273 275 276 278 284 284
290 291 294 297 298 300 305 306 308 311 312 316 320 321 324 328 329
HERKES N C#
6 KISIM I C# DL
Kutulama ve Kutudan karma object Genel Bir Veri Tipi midir?
BLM 12: ARAYZLER, YAPILAR VE NUMARALANDIRMALAR
Arayzler .. Arayzleri Uygulamak .
Arayz Referanslarnn Kullanm . Arayz zellikleri . Arayz ndeksleyiciler . Arayzler Kaltm Yoluyla Aktarlabilir .. Arayz Kaltm le Birlikte sim Gizleme .. Ak Uygulamalar
zel Bir Uygulama Gelitirmek . Belirsizlii Ortadan Kaldrmak in Ak Uygulamalarn Kullanm ..
Bir Arayz ve zet Snf Arasnda Tercihte Bulunmak . .NET Standart Arayzleri ... Arayzlerle ilgili Bir rnek alma .. Yaplar ...
Yaplara Neden Gerek Vardr? .. Numaralandrmalar .
Bir Numaralandrmaya ilk Deer Atamak Bir Numaralandrmann Temel Tipini Belirtmek .. Numaralandrmalarn Kullanm
BLM 13: KURALDII DURUM YNETM .
System.Exception Snf . Kural D Durum Ynetimiyle lgili Esaslar .
try ve catch'in Kullanm .. Basit Bir Kural D Durum rnei kinci Bir Kural D Durum rnei ..
Yakalanmayan Kural D Durumlarn Sonular Kural D Durumlar, Hatalar Zarife Kontrol Altna Almanza Olanak Tanr Birden Fazla catch fadesinin Kullanm .. Kural D Durumlarn Tmn Yakalamak try Bloklarn Kmelemek ... Bir Kural D Durum Frlatmak .
Kural D Durumu Yeniden Frlatmak . finally'nin Kullanm . Kural D Durumlara Yakndan Bir Bak ...
Ska Kullanlan Kural D Durumlar ... Kural D Durum Snflarn Tretmek . Tretilmi Snflarla lgili Kural D Durumlar Yakalamak ... checked ve unchecked Kullanm .
BLM 14: I/O KULLANIMI
C#'n I/O Sistemi, Aklar zerine Kurulmutur . Byte Aklar ve Karakter Aklar . nceden Tanml Aklar
Ak Snflar . Stream Snf
331 333
335 336 337 341 344 345 347 348 348 349 350 351 351 352 357 360 362 364 365 365
367 368 369 369 370 371 373 374 375 376 377 379 380 381 383 384 386 390 392
396 397 397 397 398 398
NDEKLER
HERKES N C#
7
Byte Stream Snflar ... Karakter Akn Saran Snflar .. kili Aklar .
Konsol I/O . Konsol Girdisini Okumak Konsol kts Yazmak
FileStream ve Byte Ynelimli Dosya I/O ilemleri . Bir Dosyay Amak ve Kapatmak . Bir Filestream'den Byte'lar Okumak . Bir Dosyaya Yazmak .. Dosya Kopyalamak in Filestream Kullanmak ..
Karakter Tabanl Dosya I/O lemleri ... StreamWriter Kullanm .. StreamReader Kullanm
Standart Aklar Ynlendirmek kili Verileri Okumak ve Yazmak ...
BinaryWriter .. BinaryReader ... kili l/O lemlerinin Gsterilmesi ..
Rasgele Eriimli Dosyalar .. MemoryStream'in Kullanm .. StringReader ve StringWriter Kullanm .. Nmerik Karakter Katarlarn Dahili Gsterimlerine Dntrmek ..
BLM 15: DELEGELER VE OLAYLAR
Delegeler . oklu ar .. System. Delegate Delegelere Neden Gerek Vardr? .
Olaylar ... Bir oklu ar Olay rnei .. Olay Yneticileri Olarak static Metotlara Kar rnek Metotlar Olay Eriimcilerinn Kullanm Olaylarn eitli zelikleri ..
.NET'te Olaylarla lgili Esaslar ... EventHandler Kullanm ..
Olaylar Uygulamak: Bir rnek alma ..
BLM 16: SM UZAYLARI, NLEMC VE ASSEMBLY'LER .
sim Uzaylar sim Uzayn Deklare Etmek .. using .. using'in kinci Kullanm ekli .. sim Uzaylar Eklenebilir . sim Uzaylar Kmelenebilir ... Varsaylan sim Uzay .
nilemci .. #define .. #if ve #endif .. #else ve #elif
399 400 401 402 402 404 405 405 407 408 410 411 412 414 415 417 417 418 419 423 425 427 429
432
433 437 439 440 440 442 444 446 450 451 453 454
456
457 457 461 463 464 466 467 467 468 468
470
HERKES N C#
8 KISIM I C# DL
#undef #error . #warning #line ... #region ve #endregion
Assembly'ler ve internal Eriim Niteleyicisi . internal Eriim Niteleyicisi ..
BLM 17: ALIMA ZAMANI TP TANIMLAMASI, YANSIMA VE NTELKLER .
alma Zaman Tip Tanmlamas ... Bir Tipi is le Test Etmek . as Kullanm .. typeof Kullanm ...
Yansma .. Yansmann ekirdei: System.Type ...
Yansmann Kullanm Metotlar Hakknda Bilgi Edinmek .. Metotlar Yansma Kullanarak armak . Type'n Yaplandrclarn Elde Etmek . Assembly'lerden Tip Elde Etmek .. Tiplerin Ortaya karlmasn Tam Olarak Otomatize Etmek ...
Nitelikler Niteliklerle ilgili Temel Bilgiler Konumsal ve simlendirilmi Parametreler ..
Standart Niteliklerin Kullanm ... AttributeUsage . Conditional Nitelii .. Obsolete Nitelii ..
BLM 18: EMNYETSZ KOD, ARETLER VE ETL KONULAR ..
Emniyetsiz Kod aretilerin Esaslar unsafe Kullanm .. fixed Kullanm . Yap yelerine Bir areti Araclyla Erimek . areti Aritmetii . aretilerin Karlatrlmas . aretiler ve Diziler . aretiler ve Karakter Katarlar . oklu Dolayllk areti Dizileri ..
eitli Anahtar Kelimeler sizeof . lock . readonly stackalloc . using ifadesi
const ve volatile ...
472 472 472 472 473 473 474 475 476 476 477 479 480 480 481 482 486 489 493 499 501 502 505 509 509 510 511
513 514 515 517 517 518 519 520 521 523 524 526 526 526 526 527 527 528 529
NDEKLER
HERKES N C#
9
KISIM II: C# KTPHANESN KEFETMEK .
BLM 19: SYSTEM SM UZAYI .
System 'in yeleri Math Snf Deer Tipindeki Yaplar ..
Tamsay Tipinde Yaplar Kayan Nokta Tipinde Yaplar . Decimal . Char ... Boolean Yaps .
Array snf Dizileri Sralamak ve Aramak Diziyi Ters evirmek ... Diziyi Kopyalamak ...
BitConverter . Random ile Rasgele Saylar retmek .. Bellek Ynetimi ve GC Snf . Object IComparable Arayz . IConvertible Arayz .. ICloneable Arayz . IFormatProvider ve IFormattable ..
BLM 20: KARAKTER KATARLARI VE BMLENDRME
C#'ta Karakter Katarlar .. String Snf ..
String Yaplandrclar String Alan, ndeksleyici ve zellik .. String Operatrleri ... String Metotlar . Karakter Katarlarn Doldurmak ve Budamak . Ekleme, kartma ve Deitirme .. Harf Kipini Deitirmek ... Substring() Metodunun Kullanm .
Biimlendirme .. Biimlendirmeye Genel Bak Nmerik Biim Belirleyicileri ..
Verileri Biimlendirmek iin String.Format() ve ToString() Kullanm .. Deerleri Biimlendirmek in String.Format( ) Kullanm . Verileri Biimlendirmek in ToString() Kullanm ...
zel Bir Nmerik Biim Oluturmak . zel Biim Yer Tutucu Karakterleri ..
Tarih ve Saati Biimlendirmek .. zel Tarih ve Saat Biiminizi Oluturmak ...
Numaralandrmalar Biimlendirmek
530
531 532 533 538 539 541 544 549 553 554 554 557 557 563 566 567 568 569 569 570 572
573
574 574 575 576 576 577 589 590 592 592 593 593 594 596 597 599 600 601 604 607 609
HERKES N C#
10 KISIM I C# DL
BLM 21: OK KANALLI PROGRAMLAMA
ok Kanalllkla lgili Esaslar . Thread Snfnn Kullanm .
Bir Kanal Oluturmak .. Baz Basit Yenilikler Birden Fazla Kanal Oluturmak
alma Kanalnn Ne Zaman Sona Ereceini Belirlemek ... IsBackground zellii . Kanal ncelikleri . Senkronizasyon ...
Alternatif Yaklam .. Bir Statik Metodu Kilitlemek ... Monitr Snf ve lock ..
Wait(), Pulse() ve PulseAll() Kullanarak Kanal letiimi . Wait() ve Pulse() Kullanan Bir rnek ... Kilitlenme ..
MethodlmplAttribute Kullanm .. Kanallar Askya Almak, Srdrmek ve Durdurmak ..
Alternatif Abort() Abort()'u ptal Etmek
alma Kanalnn Durumunu Belirlemek ... Temel Kanaln Kullanm ok Kanalllk nerileri ... Ayr Bir Grevi Balatmak ..
BLM 22: KOLEKSYONLARLA ALIMAK .
Koleksiyonlara Genel Bak .. Koleksiyon Arayzleri .
ICollection Arayz . IList Arayz . Dictionary Arayz . lEnumerable, lEnumerator ve IDictionaryEnumerator ... IComparer . IHashCodeProvider .
The DictionaryEntry Yaps Genel Amal Koleksiyon Snflar
ArrayList Hashtable .. SortedList .. Stack .. Queue
BitArray le Bitleri Saklamak .. zelletirilmi Koleksiyonlar .. Bir Numaralandrc zerinden Bir Koleksiyona Erimek .
Numaralandrc Kullanmak IDictionaryEnumerator Kullanm .
Koleksiyonlar iinde Kullanc Tarafndan Tanmlanan Snflar Saklamak IComparable'i Uygulamak .. IComparer'i Belirtmek .
Koleksiyonlarn zeti ..
611 612 613 613 616 617 619 622 623 625 629 631 631 632 633 636 637 639 641 642 644 645 646 646
649 650 651 651 652 653 655 655 655 656 656 656 664 666 670 672 675 678 678 679 680 682 683 685 687
NDEKLER
HERKES N C#
11
BLM 23: INTERNET LE A UYGULAMALARI .
System.Net yeleri . Uniform Resource Identifier'lar . Internet Eriim Esaslar ..
WebRequest . WebResponse . HttpWebRequest ve HttpWebResponse . lk Basit rnek ..
A Hatalarn Kontrol Altna Almak ... Create() Tarafndan retilen Kural D Durumlar . GetReponse() Tarafndan retilen Kural D Durumlar ... GetResponseStream() Tarafndan retilen Kural D Durumlar Kural D Durum Ynetimini Kullanmak .
URI Snf .. Ek HTTP Yant Bilgilerine Eriim ..
Bala Eriim .. erezlere Eriim .. LastModified zelliinin Kullanm
MiniCrawler: rnek alma . WebClient Kullanm ...
KISIM III: C#'l UYGULAMAYA GERMEK .
BLM 24: BLEENLERN OLUTURULMASI .
Bileen Nedir? . Bileen Modeli ..
C# Bileeni Nedir? .. Konteynerler ve Siteler ... C# ite COM Bileenlerinin Karlatrmas ..
IComponent .. Bileen . Basit Bir Bileen ..
CipherLib'i Derlemek ... CipherComp Kullanan Bir stemci .
Dispose()'u Devre D Brakmak . Dispose(bool)'un Kullanm Dispose Edilmi Bir Bileenin Kullanmn nlemek ..
using fadesini Kullanmak .. Konteynerler .
Konteynerin Gsterilmesi ... Bileenler, Programlamann Gelecei mi? ..
BLM 25: FORM TABANLI WNDOWS UYGULAMALARI GELTRMEK .
Windows Programlamann Ksa Tarihesi .. Form Tabanl Bir Wndows Uygulamas Yazmann ki Yntemi .. Windows'un Kullanc ile Etkileimi .. Windows Formlar ...
Form Snf Form Tabanl Bir Windows Program Tasla ..
688 689 690 691 692 693 694 694 697 697 698 698 698 700 701 702 703 705 706 709
713
714 715 715 716 716 716 717 717 719 720 720 721 723 728 729 730 732 733
734 735 736 736 737 737 737
HERKES N C#
12 KISIM I C# DL
Windows Taslan Derlemek Dme Eklemek ....
Button Snfnn Esaslar . Bir Forma Dme Eklemek Basit Bir Dme rnei ..
Mesajlar Ynetmek Alternatif Uygulama .
Mesaj Kutusunun Kullanm ... Men Eklemek . imdi Ne Yapabilirsiniz?
BLM 26: YNELENEREK NEN BR DEYM AYRITIRICISI .
Deyimler Deyimleri Ayrtrmak: Problem Bir Deyimi Ayrtrmak Bir Deyimi Paralara Ayrmak ... Basit Bir Deyim Ayrtrcs ...
Ayrtrcy Anlayalm . Ayrtrcya Deiken Eklemek ... Yinelenerek inen Ayrtrcda Sz Dizimi Kontrol Denenecek Birka ey ...
EK A: XML AIKLAMALARI REFERANSI
XML Aklama mleri ... XML Belgelemesinin Derlenmesi . XML Belgeleme rnei .
EK B: C# VE ROBOTK ..
740 741 741 742 742 743 746 746 749 754
755 756 757 758 759 762 767 768 776 777
779 780 781 782
784
B R N C B L M
C#'IN DOUU
1
HERKES N C#
KISIM I C# DL
14
C#, programlama dillerinin sregelen geliiminde bir sonraki adm temsil eder, C#n
ortaya knn kkleri derinlere, gemi birka yl boyunca bilgisayar dillerinin geliimini
nitelemekte olan gelitirme ve adaptasyon srelerine kadar uzanr. Daha nce ortaya kan
baarl dillerin tmnde olduu gibi, C# da bir yandan programlama sanatn daha ileriye
tarken, te yandan gemiin zerine ina edilmitir.
Microsoft tarafndan .NET Frameworkn (.NET ats) geliimini desteklemek amacyla
gelitirilen C#, zamann snavndan gemi zelliklerinin ve en son teknolojik yeniliklerin
gcnden yararlanmaktadr. C#, modern kurumsal biliim ortamlar iin programlar yazmaya
ynelik olduka kullanl ve verimli yntemlerden biridir. Windows, internet, eitli bileenler
vs, bu modern kurumsal biliim ortamlar kapsamnda yer almaktadr. Bu srete C#, program-
lama manzarasn yeniden tanmlamtr.
Bu blmn amac C# tarihsel adan yerine yerletirmektir. Bunu gerekletirirken
C#n ortaya kna neden olan faktrler, C#n tasarm felsefesi ve dier bilgisayar
dillerinden nasl etkilendii de bu kapsamda ele alnacaktr. Bu blmde ayrca, C# ile .NET
Framework arasnda nasl bir iliki olduu da aklanmaktadr.
C# Aile Aac
Bilgisayar dilleri bolukta asl deildir. Aslnda, bilgisayar dilleri birbirleriyle
balantldr; her yeni dil, kendisinden nceki dillerden bir ekilde etkilenmitir. Farkl bitki
trlerinin, birbirlerinin polenlerini kullanarak yeni bitki trleri oluturmas gibi bir durum sz
konusudur. Benzer ekilde, bir dilin zellikleri bir dierine uyarlanm, varolan bir dile bir
yenilik eklenmi veya eski bir zellik varolandan karlmtr, Bu ekilde diller gelimekte ve
programlama sanat ilerlemekledir. C# da bu balamda bir istisna deildir.
C# zengin bir programlama mirasna sahiptir. C# direkt olarak dnyann en baarl
programlama dillerinin ikisinden tretilmitir: C ve C++ . Ayrca bir bakasyla da yakndan
ilikilidir, Java. Bu ilikilerin doasn anlamak, C# anlamak iin kritik neme sahiptir. Bu
nedenle, C# bu dilin tarihi erevesine oturtarak incelemeye balyoruz.
C: Modern Programlama ann Balangc
Cnin ortaya k programlamann modern ann balangcna iaret eder. C, Dennis
Ritchie tarafndan 1970te, UNIX iletim sistemi kullanan DEC PDP-11 zerinde icat edildi.
Daha nceki baz diller, zellikle Pascal, kayda deer bir baar elde etmi olsa da, bugnk
programlamann gidiatn belirleyen modeli kuran C olmutur,
C, 1960larn yapsal programlama (structured programming) devrimi ile ortaya kt.
Yapsal programlama ncesinde byk programlar yazmak zordu, nk program mant
"spagetti kod" olarak bilinen, takibi g, bir takm arapsana dnm atlamalar, arlar ve
dnlerden ibaret olan bir program yapsna dnme eilimindeydi. Yapsal dillerin bu
probleme getirdii are; dzgn tanmlanm kontrol ifadeleri, yerel deikenli alt rutinler
(subroutines) ve dier gelimi zelliklerdir. Yapsal dilleri kullanarak bir dereceye kadar
byk programlar yazmak mmkn hale geldi.
BLM 1: C#IN DOUU
HERKES N C#
15
O zamanlar baka yapsal diller de mevcut olmasna ramen gc, estetii ve ifade
edilebilirlii baaryla birletiren ilk dil C oldu. Cnin ksa ve z ama ayn zamanda kullanm
kolay sz dizimi, kontroln (dilde deil de) programcda olmasna dayanan felsefesiyle
birleince ok ksa bir srede birok kiinin dier dilleri brakp Cye dnmesiyle sonuland.
Bugnn bak asyla anlalmas biraz g olabilir ama C, programclarn uzun zamandr
bekledii taze bir soluktu. Sonu olarak; C, 1980'lerin en yaygn olarak kullanlan yapsal
programlama dili halini ald.
Her eye ramen, saygn C dilinin bile kstlayc ynleri vard. En zahmetli ynlerinden
biri byk programlar ele almadaki yetersizliiydi. Proje belirli bir boyuta ulat zaman C
dili adeta bir engele arpar ve bu noktadan sonra C programlar anlalmas ve srdrlmesi zor
bir hal alr. Bu limite tam olarak ne zaman ulalaca programa, programcya ve eldeki ara-
lara bal olmakla birlikte 5,000 satr gibi ksa bir kodda bile bu durumla karlalabilmektedir.
Nesne Ynelimli Programlamann ve C++n Douu
1970'lerin sonlarna doru birok projenin boyutu, yapsal programlama
yntembilimlerinin ve C dilinin baa kabilecei snrlara ya yaklamt ya da ulamt. Bu
problemi zmek amacyla nesne ynelimli programlama (OOP Object Oriented
Programming) denilen yeni bir programlama yntemi ortaya kmaya balad. Nesne ynelimli
programlamay kullanarak, bir programc ok daha byk programlarn stesinden
gelebilecekti. Sorun, o zamanlar en popler dil olan Cnin nesne ynelimli programlamay
desteklememesiydi. Cnin nesne ynelimli bir versiyonu iin duyulan istek en sonunda C++n
ortaya kmasna neden oldu.
C++, Bjarne Stroustrup tarafndan Murray Hill, New Jerseydeki Bell Laboratuarlarnda
I979da icat edilmeye baland. Stroustrup, bu yeni dili ilk nce "C with Classes" ("Snfl C")
olarak adlandrd. Ancak, 1983'te dilin ismi C++ olarak deitirildi. C++ , C dilinin btnn
iermektedir. Bu nedenle C, C++n zerine ina edildii bir temeldir. Stroustrup'un C zerine
yapt deiikliklerin pek ou, nesne ynelimli programlamay desteklemek amacyla
tasarlanmt. Yeni dili C temeli zerine ina ederek Stroustrup, nesne ynelimli programla-
maya yumuak bir gei salamtr. Bir C programcsnn nesne ynelimli yntembilimin
avantajlarndan yararlanmadan nce, btnyle yeni bir dil renmek zorunda kalmak yerine,
sadece bir-iki yeni zellik renmesi gerekecekti.
C++ 1980lerin byk blmn, arka planda, kapsaml bir gelime kaydederek geirdi.
1990'larn bandan itibaren C++ genel kullanm iin hazrd; stelik, poplaritesi de adeta
patlama yapmt. On yllk srecin sonuna gelindiinde C++ en yaygn olarak kullanlan prog-
ramlama dili halini almt. Bugn halen, yksek performansl, sistem seviyesinde kod gelitir-
mek iin C++ stn bir dildir.
C++n kefinin bir programlama dili ortaya karmaya ynelik bir giriim olmadn anla-
mak kritik neme sahiptir. Bilakis, C++ zaten ok baarl bir dilin gelitirilmi haliydi. Dillerin
geliimi ile ilgili bu yaklam - mevcut bir dil ile balayp, onu daha da ileriye tamak - bugn
bile devam etmekte olan bir trendin ncs oldu.
HERKES N C#
KISIM I C# DL
16
nternet ve Javann Gelii
Programlama dillerindeki bir sonraki balca ilerleme Java ile gerekletirilmitir. nceleri
Oak olarak adlandrlan Java ile ilgili almalar I99lde Sun Microsystemsda balad. Java'nn
tasarmnn arkasnda yer alan esas src g James Gosling'di. Patrick Naughton, Chris
Warth, Ed Frank ve Mike Sheridann da Java zerinde ayrca rol oldu.
Java, sz dizimi ve felsefesi C++tan alnan yapsal ve nesne ynelimli bir dildir. Javann
yeniliki zellikleri, programlama sanatndaki ilerlemelerden ok fazla etkilenmedi (geri bu
ilerlemelerin bir ksmnn kukusuz etkisi olmutur); bu zellikleri daha ziyade biliim orta-
mnda yaanan deiiklikler biimlendirdi. nternet'in genel kullanma almas ncesinde,
programlarn birou belirli bir CPU ve belirli bir iletim sistemi iin yazlyor, derleniyor ve
ynlendiriliyordu. Programclarn kodlarn yeniden kullanmay sevdikleri her zaman iin ge-
erli bir durum olsa da, bir program kolaylkla bir ortamdan dierine aktarma becerisi halen
eriilmesi gereken bir zellikti ve tanabilirlik (portability), dier acil problemlerin yannda,
ancak arka koltukta yer bulabiliyordu. Ancak, birok farkl tipte CPUnun ve iletim sisteminin
birletirildii nternet'in kyla birlikte, eski tanabilirlik problemi de yeniden gndeme
geldi. Tanabilirlik problemini zmek iin yeni bir dile ihtiya vard. te bu yeni dil Java'yd.
Java'nn tek nemli zellii (ayrca, hzla kabul grmesinin de nedeni), platformlar
arasnda tanabilir kod gelitirme becerisi olmasna ramen Java'y tevik eden asl enerjinin
nternet olmadn kaydetmek enteresandr. Asl tevik, gml denetleyiciler (embedded
controllers) iin yazlm gelitirmek amacyla kullanlabilecek platformdan bamsz bir dile
(cross-platform language) olan ihtiyatr. 1993'te, gml denetleyiciler iin kod gelitirirken
ortaya kan platformlar arasnda tanabilirlii ile ilgili hususlarla nternet iin kod
gelitirmeye alrken de karlald arlk netlemiti. Hatrlaynz: nternet, birok farkl
tipte bilgisayarn yaad ok geni, datk bir biliim evrenidir. Tanabilirlik problemini
kk lekte zen tekniklerin aynlar, byk lekte nternet'e de uygulanabilir.
Java, programn kaynak kodunu bytecode denilen bir ara dile dntrerek tanabilirlii
salyordu. Bu bytecode daha sonra Java Sanal Makinesi (Java Virtual Machine - JVM)
tarafndan altrlyordu. Bu nedenle, bir Java kodu JVMin mevcut olduu her ortamda
altrlabilecekti. Ayrca, JVMi uygulamak nispeten kolay olduu iin JVM ok sayda
ortamda kolayca kullanlabiliyordu.
Javann "bytecode" kullanm hem Cye hem de C++a gre kkten farkllk gsteriyordu.
C ve C++ derlendiinde hemen hemen her zaman altrlabilir makine kodu elde ediliyordu.
Makine kodu ise belirli bir CPU ve iletim sistemine sk skya baldr. Yani, bir C/C++
programn farkl bir sistemde altrmak istemiseniz, programn yeniden derlenmesi ve bu
ortam iin spesifik olarak makine kodunun retilmesi gerekecekti. Bu nedenle, ok eitli
ortamlarda alacak bir C/C++ program gelitirmek iin programn birka farkl altrlabilir
versiyonuna ihtiya vard. Bu pratik olmad gibi ayn zamanda maliyetliydi de. Java'nn ara
dil kullanm zarif ve maliyet asndan hesapl bir zmd. Aynca bu, C#n kendi amalar
dorultusunda adapte edecei bir zmd.
BLM 1: C#IN DOUU
HERKES N C#
17
nceden bahsedildii gibi, Java; C ve C++n soyundan gelmektedir. Sz dizimi Cyi
temel alr; nesne modeli ise C++tan gelitirilmitir. Java kodu ne ileri ne de geri ynde C veya
C++ ile uyumlu olmasa da, Java'nn sz dizimi yeteri kadar benzer olduu iin, ok sayda
programcdan oluan mevcut C/C++ programclar ekibi ok az bir aba ile Javaya
kayabileceklerdi. stelik Java mevcut bir yntemin zerine ina edilmi ve gelitirilmi olduu
iin Gosling ve arkadalar yeni ve yeniliki zelliklere odaklanmakta serbesttiler. Tpk
Stroustrupun C++ gelitirirken tekerlei yeniden icat etmesine gerek olmad gibi,
Gosling'in de Javay gelitirirken btnyle yeni bir dil icat etmesi gerekmiyordu. laveten,
Javann ortaya kyla C ve C++ yeni bilgisayar dillerinin zerine ina edilecei onaylanm
bir katman olmu oluyordu.
C#n Douu
Java, nternet ortamnda tanabilirlii evreleyen birok hususu baaryla ortaya koymu
olmasna ramen, Javann da yetersiz kald baz zellikler hala mevcuttur. Bunlardan biri,
diller arasnda uyum iinde alma (cross-language interoperability) olarak tarif edilebilecek
zelliidir Buna ayrca, kark dillerde programlama (mixed-language programming) da denir.
Bu, bir dilde retilmi bir kodun bir baka dilde retilmi kodla birlikte kolaylkla alma
becerisidir. Diller arasnda uyum iinde alma zellii byk, datk yazlm sistemleri
gelitirirken gereklidir. Bu, ayrca programlama yazlm bileenleri iin de istenilen bir zellik-
tir. nk en kymetli bileen; en ok sayda iletim ortamnda, en eitli bilgisayar dilli
yelpazesinde kullanlabilen bileendir.
Java'nn yoksun olduu bir dier zellik ise Windows platformlaryla tam entegrasyondur.
Java programlar (Java Sanal Makinesinin kurulmu olduunu varsayarak) Windows ortamnda
altrlabilir olmalarna ramen, Java ve Windows yakndan ilikili deildir. Windows dn-
yada en yaygn olarak kullanlan iletim sistemi olduundan, Windows iin dorudan destekten
yoksun olmas, Java iin bir dezavantajdr.
Bu ve dier ihtiyalara cevap vermek amacyla Microsoft, C# gelitirdi. C#, 1990larn
sonlarna doru Microsoftta ortaya kt ve Microsoftun .NET stratejisinin btnnn bir par-
as oldu. C# ilk kez 2000in ortalarnda alfa versiyonu olarak piyasaya kt. C#n ba mimar,
eitli byk baarlara imza atm bulunan, dnyann nde gelen dil uzmanlarndan Anders
Hejlsbergdir. rnein, Hejlsberg 1980'lerde ok baarl ve gl bir dil olan Turbo Pascaln
orijinal yazardr. Turbo Pascaln sadeletirilmi uygulamas, gelecein tm derleyicileri iin
standartlar belirlemiti.
C#; C, C++ ve Java ile dorudan balantldr. Bu tesadf deildir. Bunlar, dnyada en
yaygn olarak kullanlan - ve en fazla sevilen - programlama dillerinden dr. stelik bugn
profesyonel programclarn neredeyse tamam C ve C++, birou da Java'y bilmektedir. C#
salam ve iyi anlalr bir temel zerine ina ederek bu dillerden C#a kolay bir gei de
salanm oldu. Hejlsberg iin tekerlei yeniden icat etmek ne gerekli ne de istenilir bir du-
rum olmad iin, kendisi belirli gelimelere ve yeniliklere odaklanmakta serbestti.
HERKES N C#
KISIM I C# DL
18
C#n aile aac ekil 1.1de gsterilmektedir. C#n dedesi Cdir. Cden C# sz dizimini,
anahtar kelimelerinin birounu ve operatrlerini almtr. C#, C++ ile tanmlanan nesne
modeli zerine kurulmutur ve bu nesne modelini gelitirmitir. C veya C++ biliyorsanz C#
ile adeta kendinizi evinizde hissedeceksiniz.
C# ve Java arasndaki iliki biraz daha karmaktr. Daha nce akland gibi, Java da C
ve C++ 'tan tremitir. Java da C/C++ sz dizimini ve nesne modelini paylamaktadr. Tpk
Java gibi, C# da tanabilir kod retmek amacyla tasarlanmtr. Ancak C#, Javadan
trememitir. Aksine, C# ve Java ortak bir soyu paylaan, fakat birok nemli adan farkllk
gsteren birer kuzen gibidir. Her eye ramen, bunun iyi bir taraf da vardr: Eer Javay
biliyorsanz birok C# kavram size tandk gelecektir. Aksi de dorudur: ayet gelecekte Java
renmeniz gerekli olursa, C# ile rendiiniz birok ey Java'da da geerli olacaktr.
Bu kitabn konular iinde uzun uzadya inceleyeceimiz C#n pek ok yeni zellii
mevcuttur. Ancak C#n en nemli zelliklerinden bir ksm, standart olarak mevcut olan ve
yazlm bileenleri iin sunulan destek ile balantldr. Aslnda, C# bileen ynelimli bir dil
(component-oriented language) olarak nitelenmektedir; nk C#, yazlm bileenlerini yazmak
iin btnleik destek iermektedir.
rnein C#, bileenleri oluturan eleri, mesela zellikleri, metotlar ve olaylar dorudan
destekleyen zellikler ierir. Ancak, C#n kark dillerin hkim olduu bir ortamda ala-
bilme becerisi belki de C#n bileen ynelimli zelliklerinden en nemlisidir.
EKL 1.1: C# aile aac
C# ile .NET Framework Arasndaki Balant
C# kendi bana incelenebilecek bir bilgisayar dili olmasna ramen C#n altrma
ortam (runtime environment) ile, yani .NET Framework ile zel bir ilikisi vardr. Bunun iki
sebebi vardr. Birincisi, C# balangta Microsoft tarafndan .NET Framework iin kod
gelitirmek amacyla tasarlanmt. kincisi, C# tarafndan kullanlan ktphaneler, .NET
Framework tarafndan tanmlanan ktphanelerdi. Yani, C# dilini .NET ortamndan ayrmak
C
C++
Java C#
BLM 1: C#IN DOUU
HERKES N C#
19
mmkn olsa dahi her ikisi birbiriyle sk skya baldr. Bu nedenle, .NET Framework' genel
olarak anlamak ve bunun C# iin nemini kavramak gereklidir.
.NET Framework Nedir?
.NET Framework, ok datk (highly-distributed), bileen ynelimli uygulamalarn
gelitirilmesini ve yrtlmesini destekleyen bir ortam tanmlamaktadr. .NET Framework,
farkllk gsteren bilgisayar dillerinin birlikte almasn mmkn klar ve Windows platformu
iin gvenlik, tanabilirlik (programlar asndan) ve ortak bir programlama modeli salar.
.NET Frameworkn doas gerei yalnzca Windows ile snrl olmadn (geri bugn iin
mevcut tek ortam bu olmasna ramen) belirtmemiz gereklidir. Bunun anlam udur: .NET
Framework iin yazlm programlar gelecekte Windows olmayan ortamlara da tanabilecektir.
.NET Framework C# ile ilikili olduu iin iki ok nemli unsuru tanmlamaktadr.
Bunlardan ilki Common Language Runtimedr (CLR - Ortak Dil alma Zaman) Bu,
programnzn almasn idare eden sistemdir. Dier avantajlarnn yan sra CLR, .NET
Frameworkn programlarn tanabilirliini mmkn klan, kark dilde programlamay
destekleyen ve gvenlii salayan bir parasdr.
kinci unsur ise .NET snf ktphanesidir. Bu ktphane, programnzn altrma
ortamna erimesine imkn verir. rnein, ekranda bir ey gstermek gibi bir I/O (Giri/k)
ilemi gerekletirmek istiyorsanz, bunun iin .NET snf ktphanesini kullanacaksnz. ayet
programlamay yeni reniyorsanz, snf terimi size yeni gelebilir. Bu terim kitabn daha son-
raki blmlerinde ayrntl aklanyor olmakla birlikte, imdilik ksa bir tanm yeterli olacaktr:
Snf, programlar organize etmeye yarayan nesne ynelimli bir zelliktir. Bir program .NET
snf ktphanesinde tanmlanan zelliklerle kstl kalrsa, .NET alma zaman sisteminin
desteklendii her yerde altrlabilir. C# otomatik olarak .NET snf ktphanesini kulland
iin, C# programlar .NET ortamlarnn tmne otomatik olarak tanabilir,
Common Language Runtime Nasl alr?
CLR, .NET kodunun altrlmasn (yrtlmesini) idare eder. CLR u ekilde alr: Bir
C# programn derlediinizde, derleyiciden elde edilen kt altrlabilir bir kod deildir.
Bilakis bu, Microsoft Intermediate Language (MSIL) denilen zel bir tipte szde kod
(pseudocode) ieren bir dosyadr. MSIL, spesifik bir CPUdan bamsz olan birtakm
tanabilir komutlar tanmlar. Astnda, MSIL tanabilir bir Assembly dili tanmlar. Dier bir
husus da udur: MSIL her ne kadar Java'nn bytecode'una benziyor ise de her ikisi ayn
deildir.
Program alt zaman ara kodu altrlabilir bir koda dntrmek CLRin grevidir.
Bylece, MSIL elde edilecek ekilde derlenen her program CLRin gereklendii her ortamda
altrlabilir. Bu. .NET Framework'n tanabilirimi temin etme biiminin bir parasdr.
Microsoft Intermediate Language, bir JIT derleyici kullanlarak altrlabilir bir koda
evrilir, J1T, Just-In-Timea karlk gelir (yani, Tam Zamannda demektir). Sre yle
HERKES N C#
KISIM I C# DL
20
geliir: Bir .NET program alt zaman CLR, JIT derleyiciyi etkin klar. JIT derleyici
programnzn paralarnn her birine duyulan ihtiyac temel alarak MSIL'i yerel dile
dntrr. Bylece, C# programnz balangta MSIL retecek ekilde derlenmi olsa bile
aslnda yerel kod gibi alacaktr. Bunun anlam udur: Programnz balangta yerel kod
retecek ekilde derlenmi olsayd, elde etmi olaca alma hzna yakn bir hzda alacak,
stelik MSIL'in tanabilirlik avantajlarna da kavuacaktr.
Bir C# programn derlendiinizde, MSlLe ek olarak elde edilen bir dier ey de metadata
olarak adlandrlan ktdr. Metadata, programnzn kulland verileri tarif eder ve kodunuzun
dier kodlarla etkilemesini mmkn klar. Metadata, MSIL ile ayn dosya iinde yer alr.
Kontrol Altna Alnan ve Alnmayan Kodlar
Genel olarak, bir C# program yazdnzda kontrol altna alnan kod (managed code)
denilen bir kod gelitirirsiniz. Kontrol altna alnan kod, Common Language Runtime'n
kontrolnde az nce anlatlan ekilde altrlr. Kontrol altna alnan kod CLRin kontrolnde
alt iin, belirli kstlamalara tabidir - bunun yannda, baz avantajlar da elde eder.
Kstlamalar kolaylkla tarif edilir ve karlanr: Derleyici, CLRa ynelik bir MSIL dosyas
retmelidir (C# bunu gerekletirir) ve .NET Framework ktphanelerini kullanmaldr (C#
bunu da gerekletirir). Kontrol altna alnan kodun avantajlar pek oktur. Modern bellek
ynetimi, dilleri kartrma becerisi, daha sk gvenlik, srm kontrol destei ve etkileecek
yazlm bileenleri iin net bir yntem, bu avantajlar arasnda yer alr.
Kontrol altna alnan kodun tam tersi ise kontrol altna alnmayan koddur (unmanaged
code). Kontrol altna alnmayan kod, Common Language Runtime allnda almaz. Yani,
.NET Frameworkn gelitirilmesi ncesinde yer alan Windows programlarnn tm kontrol
altna alnmayan kod kullanrlar. Kontrol allna alnan ve alnmayan kodlarn bir arada
almas mmkndr; bylece C#n kontrol altna alnabilir kod rettii gerei, C#n
nceden mevcut programlarla birlikte alabilme becerisini kstlamaz.
Common Language Specification
Kontrol altna alnan kodlarn tm CLR ile salanan avantajlardan yararlanyor olsa da,
ayet kodunuz farkl dillerde yazlm programlar tarafndan kullanlacaksa, kullanlabilirlii en
st seviyeye karmak iin kodunuzun Common Language Specificationa (CLS - Ortak Dil
Spesifikasyonu) sk skya yapmas gereklidir. CLS, farkl dillerde ortak olan zellikleri tarif
eder. CLS uyumu, dier diller tarafndan kullanlacak yazlm bileenleri gelitirirken zellikle
nemlidir. CLS, Common Type Systemin (CTS - Ortak Tip Sistemi) bir altkmesini ierir.
CTS, veri tiplerini ilgilendiren kurallar tarif eder. Elbette, C# hem CLSi hem de CTSi
desteklemektedir.
K N C B L M
C#A GENEL BR BAKI
2
HERKES N C#
KISIM I C# DL
22
Bir programlama dilini renirken zorlanlan konularn ak farkla en banda yer alan
husus, elerin bi birinin tek bana mevcut olmad gereidir. Aksine, dilin bileenleri
birlikle alrlar. Bu ekilde birbiriyle bantl olmak, C#n dier zelliklerine dokunmadan
tek zelliini anlatmay zorlatrr. Genellikle, bir zellii ele alrken bir bakas hakknda n
bilgi sahibi olmak gereklidir. Bu problemin stesinden gelmeye yardmc olmak amacyla, bu
blmde baz C# zelliklerinin ksa bir zeti sunulmaktadr. Bir C# programnn genel yaps,
baz temel kontrol ifadeleri ve operatrler, bu blmde ele alnan zellikler arasnda yer
almaktadr. Bu blmde ok fazla ayrntya girilmezken, daha ok herhangi bir C#
programnda rastlanabilen genel kavramlar zerine konsantre olunuyor. Burada ele alnan
konularn birou, Ksm Iin kalan blmlerinde daha ayrntl olarak incelenmektedir.
Nesne Ynelimli Programlama
C#n merkezinde nesne ynelimli programlama (OOP - Object Oriented Programming)
yer almaktadr Nesne ynelimli yntembilim C#tan ayrlmaz; tm C# programlar en azndan
bir lye kadar nesne ynelimlidir. Nesne ynelimli programlamann C# iin neminden
dolay, basit bile olsa bir C# program yazmaya balamadan nce nesne ynelimli
programlamann temel prensiplerini kavramak yararldr.
Nesne ynelimli programlama, programlama yaklam iin gl bir yntemdir.
Bilgisayarn icadyla birlikte programlama yntembilimleri, her eyden nce programlarn
artan karmaklna uyum salamak amacyla ok ciddi lde deiti. rnein,
bilgisayarlarn icat edildii yllarda programlama, bilgisayarn n paneli kutlanlarak, ikili
(binary) makine komutlarna karlk gelen dmelere basmak suretiyle gerekletiriliyordu.
Programlar birka yz satr uzunluunda olduu mddete bu yntem ise yaryordu.
Programlar byynce Assembly dili icat edildi; bylece programclar, makine komutlarna
karlk gelen sembolik iaretleri kullanarak daha byk ve artan karmaklktaki programlar
ele alabileceklerdi. Programlar bymeye devam ettike, programclara karmaklkla baa
kabilmek iin daha fazla ara sunan FORTRAN ve COBOL gibi yksek seviyeli diller
ortaya kt. Bu ilk diller, artk atlama noktasna geldiinde yapsal programlama icat edildi.
unu bir dnn: Programlamann her bir kilometre tanda, programclarn giderek
daha da artan karmaklkla baa kmalarna imkn veren teknikler ve aralar gelitirilmitir.
Bu srecin her admnda yeni yntem, nceki yntemlerin en iyi elemanlarn alm ve
ilerlemitir. Bu, nesne ynelimli programlama iin de geerlidir. Nesne ynelimli
programlama ncesinde birok proje, yapsal programlamann artk ie yaramad noktaya
yaklamt (veya amt). Karmakl daha iyi ele alabilen bir yntemlere ihtiya vard ve
zm, nesne ynelimli programlamayd.
Nesne ynelimli programlama, yapsal programlamaya zg en iyi kavramlar alm ve
bunlar baz yeni kavramlarla birletirmiti. Sonuta programlar farkl ve daha iyi ekilde
organize edilebilecekti. En genel anlamda, bir program iki yntemden biri kullanlarak
organize edilebilir: kodu etrafnda (meydana gelenler) veya verileri etrafnda (etkilenenler).
Sadece yapsal programlama teknikleri kullanlarak programlar genellikle kod etrafnda
organize edilir. Bu yntem ayrca veriye etki eden kod olarak da dnlebilir.
BLM 2: C#A GENEL BR BAKI
HERKES N C#
23
Nesne ynelimli programlar dier ekilde alrlar. Bu tr programlar koda eriimi
kontrol eden veri temel prensibine dayanarak veri etrafnda organize edilirler. Nesne
ynelimli bir dilde, verileri ve bu verilere etki etmeye izin verilen kodu tanmlarsnz.
Bylece, bir veri tipi bu veri zerine uygulanabilecek ilemleri tam olarak tanmlar.
Nesne ynelimli programlamann prensiplerini desteklemek amacyla, C# da dhil olmak
zere tm nesne ynelimli diller ortak zellie sahiptir: ilikili verilerin paketlenmesi
(encapsulation), ok biimlilik (polymorphism) ve kaltm. imdi bunlar tek tek inceleyelim.
likili Verilerin Paketlenmesi
Verilerin paketlenmesi (encapsulation), kodun maniple ettii verilerle kodu birbirine
balayan ve her ikisini dardan gelebilecek istenmeyen etkilerden ve hatal kullanmlardan
koruyan bir programlama mekanizmasdr. Nesne ynelimli bir dilde kod ve veri, kendi
kendisini ieren bir kara kutu oluturacak ekilde birbirlerine balanabilir. Gerekli veri ve
kodun tm kutunun iinde mevcuttur. Kod ve veri bu ekilde balannca bir nesne (object)
oluturulmu olur. Dier bir deyile nesne, verilerin paketlenmesini (encapsulation)
destekleyen bir aygttr.
Nesne iindeki kod, veri veya her ikisi de bu nesneye zel (private) veya ak (public)
olabilirler. zel kod veya veri, sadece bu nesnenin paralar tarafndan bilinir ve eriilebilir.
Yani zel kod veya veri, sz konusu nesnenin dnda kalan program paralar tarafndan
eriilemez. Kod veya veri ak olduunda ise, sz konusu kod ve veri bir nesnenin iinde
tanmlanm olsa bile programnzn dier paralar tarafndan eriebilirler. Nesnelerin ak
ksmlar tipik olarak, zel elere kontroll bir arayz salamak amacyla kullanlr.
C#n temel veri paketleme birimi snftr (class). Snf, bir nesnenin eklini tanmlar.
Snf, hem verileri hem de bu veriler zerinde ilem yapacak kodu belirtir. C#ta, nesneleri
ina etmek amacyla snf spesifikasyonu kullanlmaktadr. Nesneler bir snfn rnekleridir.
Yani, snf aslnda bir nesnenin ne ekilde ina edileceini belirten birtakm planlardan
ibarettir.
Snf oluturan kod ve veri sz konusu snfn yeleri (members) olarak adlandrlrlar.
zellikle, snf tarafndan tanmlanan verilerden ye deikenler (member variables) veya
rnek deikenler (instance variables) olarak sz edilir. Metot (method), C#ta alt rutin iin
kullanlan bir terimdir. Eer C/C++a ainaysanz C# programcsnn metot diye adlandrd
eyin C/C++ programcs tarafndan fonksiyon (ilev) olarak adlandrldn bilmek yararl
olabilir. C# dili C++tan dorudan tredii iin C# metotlarndan sz edildiinde fonksiyon
(ilev) terimi de yaygn olarak kullanlmaktadr.
ok Biimlilik
ok biimlilik (polymorphism - Yunanca'da birok form anlamna gelir), genel bir
etkinlikler snfna erimek iin bir arayze imkn veren bir zelliktir. ok biimliliin en
basit rnei, otomobil direksiyonudur. Gerekte hangi tipte bir vites mekanizmas kullanlrsa
HERKES N C#
KISIM I C# DL
24
kullanlsn direksiyon (arayz) hep ayn ekildedir. Yani, arabanz ister manuel vitesli, ister
otomatik vitesli olsun, direksiyon hep ayn ekilde alr, Bylece, direksiyonu sola
evirmek, hangi tipte vites kullanlrsa kutlanlsn arabann sola dnmesine neden olur. Tek
tip bir arayzn avantaj, elbette, direksiyonun nasl altracanz bildikten sonra herhangi
bir tipte arabay srebilecek olmanzda yatar.
Ayn prensip programlamaya da uygulanabilir. rnein, bir yn (ilk giren son kar
esasna dayanan bir liste) dnn. farkl tipte yna gereksinim duyan bir programnz
olabilir. yle ki, ynlardan biri tamsaylar iin, biri kayan noktal deerler iin, dieri de
karakterler iin kullanlmaktadr. Bu rnekte, ynlarda saklanan veriler farkl bile olsa,
ynlarn her birini gerekleyen algoritma ayndr. Nesne ynelimli olmayan bir dilde, her
biri farkl bir isim kullanan farkl yn rutini gelitirmeniz gerekecekti. Ancak, C#ta ok
biimlilik zelliinden tr spesifik durumun yle de alan tek bir genel yn rutini
gelitirebilirsiniz. Bu sayede, bir yn kullanmay rendiiniz andan itibaren hepsini
kullanabilirsiniz.
Daha genel bir yaklamla, ok biimlilik kavram sk sk tek arayz, ok sayda metot
deyiiyle de ifade edilir. Bu, bir grup ilikili etkinlik iin genel bir arayz tasarlamak
mmkndr, anlamna gelmektedir. ok biimlilik, genel bir etkinlik snfn belirtmek
amacyla ayn arayzn kullanlmasna imkn vererek karmakl azaltmaya yarar. Her bir
durum iin hangi spesifik etkinliin (yani metodun) uygulanacan tercih etmek derleyicinin
grevidir. Siz programclarn bu tercihi elle yapmanza gerek yoktur. Sizin sadece genel
arayz hatrlamanz ve deerlendirmeniz gerekir.
Kaltm
Kaltm (inheritance), bir nesnenin dier bir nesnenin zelliklerini ele geirebilmesini
salayan bir yntemdir. Bu nemlidir, nk kaltm, hiyerarik snflandrma kavramn
destekler. Bir dnrseniz, bilgilerin byk blm hiyerarik (yani, yukardan aaya
doru) snflandrma sayesinde ynetilebilir klnr. rnein, krmz tatl elma, elma
snflandrmasnn bir parasdr. Elma, meyve snfnn bir parasdr. Meyve ise daha byk
bir snf olan yiyecek snfnn altnda yer alr. Yani, yiyecek snf, ayn zamanda mantksal
olarak kendisinin bir alt snf olan meyve snfna da uygulanabilecek belirli zelliklere
(yenilebilir, besleyici vs.) sahiptir. Bu zelliklere ek olarak, meyve snfnn da kendisini dier
snflardan ayrt eden, kendisine zg zellikleri (sulu, tatl vs.) vardr. Elma snf bu tr
zelliklerden elmaya zg olanlar (aata yetiir, tropik meyve deildir vs.) tanmlar.
Krmz Tatl elma bu durumda, kendisinden nce gelen tm snflarn tm zelliklerini
kaltm yoluyla devralacaktr ve bu zelliklerden sadece kendisini esiz klanlar
tanmlayacaktr.
Kaltm kullanlmasayd, her nesne kendi zelliklerinin tmn aka tanmlamak
zorunda kalacakt. Kaltm sayesinde bir nesnenin kendi snf iinde sadece kendisini esiz
klan zellikleri tanmlamas yeterlidir. Nesne, genel zelliklerini atalarndan kaltm yoluyla
devralabilir. Bylece, bir nesnenin daha genel bir durumun spesifik bir rnei olmasn
mmkn klan, kaltm mekanizmasdr.
BLM 2: C#A GENEL BR BAKI
HERKES N C#
25
lk Basit Program
Artk gerek bir C# programna gz atma zaman geldi. Aada gsterilen program
derleyerek ve altrarak balayacaz:
/*
Bu basit bir C# programidir.
Bu programa Example.cs adini verelim.
*/
using System;
class Example {
// Bir C# programi Main()e cagrida bulunarak baslar.
public static void Main() {
Console.WriteLine(Basit bir C# programi.);
}
}
Bu kitap baskya hazrlanrken mevcut tek C# ortam Visual Studio .NET idi. Visual
Studio .NETi kullanarak bir C# programn iki ekilde dzenleyip derleyebilir ve
altrabilirsiniz.
Birincisi, komut satrndan altrlan derleyiciyi (csc.exe) kullanabilirsiniz, kincisi,
Visual Studio Integrated Development Environment (IDE - Btnleik Gelitirme Ortam)
kullanabilirsiniz. Burada her iki yntem de ele alnyor, (ayet farkl bir derleyici
kullanyorsanz, derleyicinizin talimatlarm izleyin.)
C# Komut Satr Derleyicisini (csc.exe) Kullanmak
Ticari projelerinizde muhtemelen Visual Studio IDEyi kullanacak olmanza ramen C#
komut satr derleyicisi, bu kitapta yer alan rnek programlarn birounu derlemek ve
altrmak iin en kolay yntemdir. Programlar C# komut satr derleyicisi kullanarak
gelitirmek ve altrmak iin aada yer alan adm izleyeceksiniz:
1. Bir metin editr kullanarak program kodlayn.
2. Program derleyin.
3. Program altrrn.
Program Kodlamak
Bu kitapta yer alan programlar Osborneun Web sitesinde mevcuttur: www.osborne.com.
Ancak, programlar elle kodlamak isterseniz, bu konuda zgrsnz. Bu durumda, Notepad
gibi bir metin editr kullanarak program bilgisayarnza kodlamalsnz. Unutmayn, salt
metin dosyalar oluturmalsnz; biimlendirilmi kelime ilemci dosyalar oluturmamaya
dikkat edin, nk kelime ilemci dosyasndaki biimlendirme bilgileri C# derleyicisini
artacaktr. Program kodlarken, dosyaya Example.cs adn verin.
HERKES N C#
KISIM I C# DL
26
Program Derlemek
Program derlemek iin, kaynak dosyann ismini komut satrnda aada gsterildii gibi
belirterek. C# derleyicisini (csc.exe) altrn:
C:\>csc Example.cs
csc derleyicisi, programn MSIL versiyonunu ieren Example.exe adnda bir dosya
oluturur. MSIL altrlabilir bir kod olmamasna ramen, yine de bir exe uzantl dosya
iinde yer alr. Example.exe dosyasn altrmaya kalktnzda Common Language
Runtime otomatik olarak JIT derleyiciyi arr. Her eye ramen dikkatli olun; ayet .NET
Frameworkn kurulu olmad bir bilgisayarda Example.exe dosyasn (veya MSIL ieren
herhangi bir baka exe dosyasn) altrmay deniyorsanz, CLR mevcut olmad iin
program almayacaktr.
NOT
csc.exe derleyicisini altrmaya balamadan nce tipik olarak //Program
Files/Microsoft Visual Studio .NET/Vc7/Bin dizini altnda yer alan
vcvars32.bat isimli toplu ilem (batch) dosyasn altrmanz gerekebilir.
Alternatif olarak, C# iin halen ilk kullanma hazrlanm bir komut satr
oturumunu da balatabilirsiniz. Bunun iin, grev ubuunun Start | Programs
mensndeki Microsoft Visual Studio .NET seenei altnda gsterilen ara
listesinden Visual Studio .NET Command Prompt seeneini iaretlemelisiniz.
Program altrmak
Program gerekten altrmak iin, aada gsterildii gibi, komut satrnda sadece
programn ismini yazmak yeterlidir:
C:\>Example
Program altnda, aadaki kt ekranda grnr:
Basit bir C# programi.
Visual Studio IDE'yi Kullanmak
Visual Studio .NET srm 7den itibaren Visual Studio IDE, C# programlarn
derleyebilir. Visual Studio .NET srm 7'yi kullanarak bir C# programn dzenlemek,
derlemek ve altrmak iin aadaki aamalar izleyeceksiniz. (Visual Studio'nun farkl bir
srmne sahipseniz, farkl aamalar izlemeniz gerekebilir.)
1. File | New | Project komutunu seerek yeni, bo bir C# projesi oluturun.
BLM 2: C#A GENEL BR BAKI
HERKES N C#
27
2. Visual C# | Windows seeneini iaretleyin, sonra aada gsterildii gibi Empty
Project seeneini iaretleyin.
3. Proje oluturulduktan sonra, Solution Explorer penceresinde grnen proje isminin
zerine sa fare tuuyla tklayn. Daha sonra, kan balamsal meny kullanarak
Add seeneini iaretleyin. Bundan sonra, Add New tem komutunu sein.
Ekrannz u ekilde grnecektir:
HERKES N C#
KISIM I C# DL
28
4. Add New Item iletiim kurusunu grnce Visual C# Items | Code seeneini ve son
olarak da, Code File seeneini iaretleyin. Ekrannz u ekilde grnecektir:
BLM 2: C#A GENEL BR BAKI
HERKES N C#
29
5. Programnz kodlayn ve dosyaya Example.cs ismini vererek kaydedin. (Bu
kitaptaki kodlar www.osborne.com adresinden indirebileceinizi hatrnzdan
karmayn.) Kaydetme ilemi bittiinde ekrannz ekil 2.1'deki gibi grnecektir.
6. Build | Build Solution komutunu seerek program derleyin.
7. Debug | Start Without Debugging komutunu seerek program altrn.
Program altrdnzda ekil 2.2'deki pencereyi greceksiniz.
NOT
Bu kitaptaki rnek programlar derlemek ve altrmak amacyla her biri iin yeni bir proje dosyas oluturmanza gerek yoktur. Bunun yerine, ayn C# projesini kullanabilirsiniz. Tek yapmanz gereken mevcut dosyay silip yeni dosyay eklemekten ibarettir. Bunun ardndan yeniden derleyin ve altrn.
nceden akland gibi, bu kitabn birinci ksmndaki ksa programlar iin csc komut
satr derleyicisini kullanmak ok daha basit bir yaklamdr. Elbette tercih sizindir.
HERKES N C#
KISIM I C# DL
30
EKL 2.1: Example.cs proje ekran
EKL 2.2: Example programnn Visual Studio IDE altnda alrken kts
Satr Satr lk rnek Program
Example.cs olduka ksa olmasna ramen, tm C# programlarnda ortak olan temel
zelliklerden birkan ierir. imdi gelin, programn isminden balayarak her parasn
yakndan inceleyelim.
C# programnn ismi istee baldr. Program dosyasnn isminin ok nem tad baz
bilgisayar dillerinden (en mehurlarndan biri Java) farkl olarak, C#la byle bir durum sz
konusu deildir. rnek programa Example.cs ismini vermeniz istendi, bylece program
derleme ve altrma ile ilgili komutlar etkili olacakt. Fakat, C# sz konusu olduu
mddete dosyaya baka bir isim de verebilirdiniz. rnein, nceki rnek program
Sample.cs, Test.cs , hatta x.cs olarak adlandrlabilirdi.
BLM 2: C#A GENEL BR BAKI
HERKES N C#
31
Geleneksel olarak, C# programlar .cs uzantsn kullanrlar. Siz de bu gelenee
uymalsnz. Ayrca, birok programc dosyaya dosya iinde tanmlanm ana snfn ismini
verirler. Example.cs dosya isminin tercih edilmesinin nedeni de budur. C# programlarnn
isimleri keyfi olduu iin, bu kitaptaki rnek programlarn birounda isimler aka
belirtilmiyor. Kendi tercih ettiiniz isimleri kullanabilirsiniz.
Program aadaki satrlarla balyor:
/*
Bu basit bir C# programidir.
Bu programa Example.cs adini verelim.
*/
Bu bir aklamadr (comment). Dier pek ok programlama dilinde olduu gibi. C# da
programn kaynak dosyasna kendi grlerinizi eklemenize imkan verir. Aklamann ierii,
derleyici tarafndan dikkate alnmaz. Aklama, programn ileyiini programn kaynak
kodunu okumakta olan herhangi birine tarif eder veya aklar. Bu rnekteki aklama,
program tarif ediyor ve kaynak dosyay Example.cs olarak adlandracanz hatrlatyor.
Elbette, gerek uygulamalarda aklamalar, genellikle programn baz paralarnn ileyiini
veya belirli bir zelliin ne ie yaradn aklarlar.
C# farkl aklama stilini destekler. Programn en stnde yer alan ve yukarda da
gsterilen birden ok satrdan oluan aklamadr. (multiline comment). Bu tr bir aklama
/* ila balamal ve */ ile sona ermelidir. Bu iki aklama simgesi arasnda yer alanlarn
hibiri derleyici tarafndan dikkate alnmaz. sminden anlalaca gibi, birden ok satrdan
oluan aklama, birka satr uzunluunda olabilir. Programdaki bir sonraki satr udur:
using System;
Bu satr programn System isim uzayn kullandn gsteriyor. C#ta isim uzay
(namespace), deklaratif (tanmlamalara ayrlan) bir blge tanmlar. sim uzaylarn daha sonra
ayrntl olarak ele alacaz. imdilik u kadar bahsedelim: Bir isim uzay, bir takm isimleri
dierlerinden ayrmaya yarayan yntemlerden biridir, Aslnda, bir isim uzaynda deklare
edilen isimler baka bir isim uzaynda deklare edilen ayn isimlerle elimeyecektir. rnek
programda System isim uzay kullanlyor System, C#n kulland bir ktphane olan .NET
Framework snf ktphanesi ile ilikili eler iin ayrlm bir isim uzaydr, using anahtar
kelimesi sadece, programn belirtilen isim uzayndaki isimleri kullandn ifade eder.
Programda yer alan bir sonraki kod satr udur:
class Example {
Bu satrda yeni bir snfn tanmlandn deklare etmek iin class anahtar kelimesi
kullanlyor nceden bahsedildii gibi snf, C#n temel veri paketleme birimidir. Example
snfn ismidir. Snf tanm al kme parantezi ({) ile balar ve kapan kme parantezi (})
ile sona erer. ki kme parantezi arasnda yer alan elemanlar snfn yeleridir. u an iin
snfn ayrntlarn ok fazla dert etmeyin. Yalnz, C#ta tm program faaliyetlerinin tek bir
HERKES N C#
KISIM I C# DL
32
snf iinde meydana geldiini de gzden karmayn. C# programlarnn tmnn neden (en
azndan bir para) nesne ynelimli olduunun bir sebebi de ite budur.
Programdaki bir sonraki satr aada da gsterilen tek satrlk aklamadr:
// Bir C# programi Main()e cagrida bulunarak baslar.
Bu, C# tarafndan desteklenen bir dier aklama tipidir. Tek satrlk aklama //
ile balar ve satrn sonunda biter. Genel bir kural olarak, programclar birka satrlk
aklamalar daha uzun grlerini aklamak iin, tek satrlk aklamalar ise ksa, satr-satr
aklamalar iin tercih ederler.
Bir sonraki kod satr aada gsterilmitir:
public static void Main() {
Bu satr Main() metodu ile balyor. nceden bahsedildii gibi, C#ta alt rutinler metot
olarak adlandrlr. Bu satrn ncesinde yer alan aklamadan da anlalaca gibi bu satr,
programn almaya balayaca satrdr. C# uygulamalarnn tm Main()i ararak
almaya balarlar. (Bu, C/C++ programlarnn almaya main()'den balamalarna
benzer.) Bu satrn her parasn tam olarak aklamak iin henz erken, nk bu, baz baka
C# zelliklerinin ayrntl olarak anlalmasn gerektiriyor. Ancak, bu kitaptaki rneklerin
birou bu kod satrn kullanaca iin imdi buna ksaca gz atalm.
public anahtar kelimesi bir eriim belirleyicisidir, Bir eriim belirleyicisi (access
specifier), programn dier blmlerinin bir snfn yesine nasl eriebileceklerini belirler.
Bir snf yesinin ncesinde public yer alyorsa bu ye, deklare edildii snfn dnda kalan
kod tarafndan eriilebilir. (publicin kart privatedr. private, bir yenin tanml
olduu snfn dndaki kod tarafndan kullanlmasn nler.) Bu rnekte Main(), public
olarak deklare edilmektedir, nk Main(), program altnda kendisinin ait olduu snf
dndaki kod (yani, iletim sistemi) tarafndan arlacaktr.
NOT
Bu kitap baskya hazrlanrken, C# aslnda Main()in public olarak deklare
edilmesini art komuyordu. Ancak, Visual Studio ,NET tarafndan desteklenen
bir ok rnekte bu ekilde deklare edilmektedir. Bu, ayrca birok C#
programcsnn da tercih ettii bir yntemdir. Bu nedenlerden tr, bu kitapta
da Main(), public olarak deklare edilecektir. Yine de, biraz farkl bir ekilde
deklare edildiini grrseniz armayn.
static anahtar kelimesi Main()in snfna ait bir nesne tanmlanmadan nce
Main()in arlmasna imkan veriyor. Main(), programn balangcnda arld iin
static anahtar kelimesinin kullanlmas gereklidir. void anahtar kelimesi sadece
Main()in bir ey dndrmediini derleyiciye bildiriyor. Daha sonra reneceiniz gibi,
metotlar da deer dndrebilir. Mainin peinden gelen bo parantezler, Main'e hibir bilgi
aktarlmadn gsteriyor. Main()e veya herhangi bir baka metoda bilgi aktarmann
mmkn olduunu daha sonra reneceksiniz. Bu satrdaki en son karakter ise { karakteridir.
BLM 2: C#A GENEL BR BAKI
HERKES N C#
33
Bu, Main()in gvdesinin baladna iaret ediyor. Bir metodu oluturan kodun tm,
metodun al kme parantezi ile kapan parantezi arasnda yer alacaktr.
Kodun bir sonraki satr aada gsterilmitir. Bu satrn Main()in iinde yer aldna
dikkat edin.
Console.WriteLine("Basit bir C# programi.");
Bu satr ekranda Basit bir C# programi." karakter katarn kt olarak gsterir.
Bu karakter katarnn peinden yeni satr gelir. Program kts aslnda standart olarak yerleik
bir metot olan WriteLine() ile gerekletirilir, Bu rnekte WriteLine(), kendisine
aktarlan karakter katarn ekranda gsterir. Bir metoda aktarlan bilgiye argman (argument)
denir. WriteLine(), karakter katarlarna ek olarak baka tr bilgilerin gsterilmesi iin de
kullanlabilir. Bu satr, konsol giri/klarn (l/O) destekleyen bir nceden tanml snfn
ismi olan Console ile balyor. Consoleu WriteLine() ile birletirerek
WriteLine()n Console snfnn bir yesi olduu derleyiciye bildiriliyor. C#n konsol
ktsn tanmlamak iin nesne kullanyor olmas gerei, C#n nesne ynelimli zelliinin
bir baka kantdr.
Dikkat ederseniz. WriteLine() ifadesi noktal virgl ile sona eriyor, keza programn
balarnda yer alan using System ifadesi de. C#ta tm ifadeler noktal virgl ile sona erer.
Programdaki kimi dier satrlarn noktal virgl ile sona ermemesinin nedeni bunlarn teknik
olarak birer ifade olmamasdr.
Program iindeki ilk } simgesi Main()i sonlandryor, sonuncu } simgesi de Example
snf tanmn sona erdiriyor.
Son bir husus: C#ta byk - kk harf (harf kipi) ayrm vardr. Bunu unutmak ciddi
problemlere neden olabilir. rnein, kazara Main yerine main ya da WriteLine yerine
writeline yazarsanz, yukardaki program hatal olacaktr. stelik, C# derleyicisi Main()
metodunu iermeyen snflar derleyecek olmasna ramen, bunlar altrmann yolu mevcut
deildir. Bu nedenle, Maini yanl yazm olsanz bile derleyici programnz derleyecektir.
Ancak, Example.exenin balang noktasnn tanmlanmadn bildiren bir de hata mesaj
ile karlaacaksnz.
Sz Dizimi Hatalarn Kontrol Altna Almak
Eer imdiye kadar yapmamsanz nceki program kodlayn, derleyin ve altrn.
nceden sahip olduunuz programlama deneyiminizden de bilebileceiniz gibi,
bilgisayarnza kodlar girerken bir eyi kazara hatal yazmak olduka kolaydr. Neyse ki,
hatal bir ey girdiinizde ve derleyici bunu derlemeye altnda, sz dizimi hatas (syntax
error) mesajn verecektir. C# derleyicisi ne yazm olursanz olun kaynak kodunuzdan
anlaml bir eyler karmaya alr. Bu nedenle, rapor edilen hata problemin asl nedenini her
zaman yanstmayabilir. nceki programda, rnein, Main() metodundan sonraki al kme
parantezinin kazara eksik olmas, csc komut satr derleyicisi kullanlarak derlendiinde,
HERKES N C#
KISIM I C# DL
34
aadaki bir dizi hata mesajnn retilmesine neden olur. (IDE kullanlarak derlendiinde de
benzer hatalar ortaya kar.)
Example.cs(12, 28) : error CS1002: ; expected
Example.cs(12, 22) : error CS1002: Invalid token ( in class,
struct, or interface member declaration
Example.cs(15, 1) : error CS1022: Type or namespace
definition, or end-of-file expected
Aka grlyor ki, ilk hata mesaj tamamen yanltr, nk eksik olan noktal virgl
deil, kme parantezidir. Son iki mesaj ise ayn lde karktr.
Konunun zeti u: Programnz bir sz dizimi hatas ierdiinde, derleyicinin mesajlarn
her zaman olduu gibi deerlendirmeyin. Bu mesajlar sizi yanltabilir. Problemi saptamak iin
bir hata mesajn "ikinci kere tahmin etmeniz" gerekebilir. Ayrca, hata olduu rapor edilen
satrn hemen ncesinde yer alan son birka kod satrna da bakn. Kimi zaman bir hata
gerekten meydana geldii noktadan birka satr sonrasnda rapor edilebilir.
Kk Bir Deiiklik
Bu kitaptaki programlarn tmnde kullanlyor olsa da ilk programn banda yer alan
using System;
ifadesi teknik olarak gerekli deildir. Ancak, bu ifade ayn zamanda deerli bir
kolaylktr. Bunun gerekli olmamasnn nedeni, C#ta her zaman bir ismi ait olduu isim uzay
ile tam olarak niteleyebiliyor olmanzdr. rnein, u satr
Console.WriteLine(Basit bir C# programi.);
u ekilde yeniden yazlabilir:
System.Console.WriteLine(Bait bir C# programi.);
Yani, ilk rnek aada gsterildii gibi yeniden kodlanabilir:
//Bu versiyon, using System ifadesini iermiyor
class Example{
// Bir C# programi Main()'e cagrida bulunarak baslar.
public static void Main(){
// Burada, Console.WriteLine tam olarak niteleniyor
System.Console.WriteLine(Basit bir C# programi.); }
}
System isim uzayna ait bir ye kullanldnda, her seferinde System isim uzayn
belirtmek okluka bezdirici olduu iin, C# programclarnn birou, bu kitaptaki
programlarn tmnde olduu gibi programlarnn en bana using System ifadesini dhil
ederler. Yine de, bir ismi, gerekli olduunda isim uzay ile aka niteleyebileceinizi
kavramak nemlidir.
BLM 2: C#A GENEL BR BAKI
HERKES N C#
35
kinci Basit Program
Bir programlama dilinde belki de hibir zellik, bir deikene deer atama ilemi kadar
nemli deildir. Deiken, bir deer atanabilen ve ismi olan bellek alandr. stelik, bir
deikenin deeri programn almas esnasnda deitirilebilir. Yani, deikenin ierii sabit
deildir, deitirilebilir.
Aadaki program, x ve y adnda iki deiken tanmlyor.
//Bu program degiskenleri tanitiyor.
using System;
class Example2 {
public static void Main(){
int x; //bu, bir degisken deklare ediyor
int y; //bu, baska bir degisken deklare ediyor
x = 100; //bu, xe 100 degerini atiyor
Console.WriteLine("x contains " + x) ;
y = x / 2;
Console.Write("y contains x / 2: ");
Console.WriteLine(y);
}
}
Bu program altrdnzda, aadaki kty ekranda greceksiniz: x contains 100
y contains x / 2 : 50
Bu program birka yeni kavram tantyor. ncelikle,
int x; //bu, bir deisken deklare ediyor
ifadesi tamsay tipinde x adnda bir deikeni deklare ediyor. C#ta tm deikenler
kullanlmadan nce deklare edilmelidir. stelik, deikenin tutabilecei deerlerin cinsi de
ayrca belirtilmelidir. Buna deikenin tipi denir. Bu rnekte x, tamsay deerleri tutabilir.
C#ta bir deikeni tamsay tipinde deklare etmek iin isminin nne int anahtar kelimesini
yerletirin. Bylece, nceki ifadede int tipinde x adnda bir deiken deklare ediliyor.
Bir sonraki satrda, y adnda bir deiken deklare edilmektedir.
int y; //bu, baska bir degisken deklare ediyor
Dikkat ederseniz bu, bir ncekiyle ayn biimi kullanyor; yalnzca, deiken isimleri
farkllk gsteriyor.
HERKES N C#
KISIM I C# DL
36
Genel olarak, bir deiken deklare etmek iin u tr bir ifade kullanacaksnz:
tip deiken-ismi;
Burada, tip deklare edilen deikenin tipini, deiken-ismi ise deikenin ismini
belirtiyor. inte ek olarak C# baz baka veri tiplerini de destekler, Aadaki kod satr xe
100 deerini atyor:
x = 100; //bu, xe 100 deerini atiyor
C#ta deer atama operatr tek eittir iaretidir. Atama operatr, sa tarafndaki deeri
sol tarafndaki deikene kopyalar.
Bir sonraki kod satr, nce "x contains" karakter katarn, bunun peinden de xin
deerini ekranda gsterir.
console.WriteLine("x contains " + x);
Bu ifadedeki art iareti xin deerinin, xin nnde yer alan karakter katarndan sonra
ekranda gsterilmesine neden olur. Bu yaklam genelletirilebilir. + operatrn kullanarak
tek WriteLine() ifadesi iinde istediiniz kadar ok sayda eyi ekranda pe pee
gsterebilirsiniz.
Bir sonraki kod satrnda, xin 2'ye blnm deeri yye atanyor:
y = x / 2;
Bu satr xdeki deeri 2ye bler, sonucu yde saklar. Bylece, bu satr altrldktan
sonra y, 50 deerini ierecektir. xin deeri ise deimeyecektir. Dier bilgisayar dillerinin
pek ounda olduu gibi C# da aada gsterilenlerin yan sra aritmetik operatrlerinin
tmn desteklemektedir:
+ Toplama
- kartma
* arpma
/ Blme
Programn dier iki satr u ekildedir:
Console.Write(y contains x / 2: ");
Console.WriteLine(y);
Burada iki yeni durum sz konusudur. ncelikle, "y contains x / 2: " karakter
katarn gstermek iin standart Write() metodu kullanlyor. Bu karakter katarnn peinden
yeni bir satr gelmiyor. Bunun anlam udur: Bir sonraki kt retildiinde bu kt ekranda
ayn satrdan balayacaktr. Write() metodu tpk WriteLine() gibidir; yalnzca, Write()
metodu, her ardan sonra yeni bir satrdan balamaz. kincisi, WriteLine() arsnda
ynin kendisinin kullanldna dikkat edin. C#ta tanml herhangi bir standart tipteki
deerlerin ktsn almak iin hem Write() hem de WriteLine() kullanlabilir.
BLM 2: C#A GENEL BR BAKI
HERKES N C#
37
Bir baka konuya gemeden nce deikenleri deklare etmekle ilgili bir hususa daha
deinelim: Ayn deklarasyon ifadesini kullanarak bir veya daha fazla deikeni deklare
etmeniz mmkndr. Sadece deiken isimlerini virgl ile ayrmanz yeterlidir. rnein, x ve
y u ekilde de deklare edilebilirdi: int x, y; //tek bir ifade ile ikisi de deklare ediliyor
Baka Bir Veri Tipi
nceki programda int tipinde bir deiken kullanlmt. Ancak, int tipinde bir
deiken yalnzca tamsaylar tutabilir. Yani, ondalk ksm gerekli olduunda int
kullanlamaz. rnein, bir int deikeni 18 deerini tutabilir, fakat 18.3 deerini tutamaz.
Neyse ki int, C#ta tanml olan birka veri tipinden yalnzca biridir. Ondalk ksm olan
saylara da imkn vermek amacyla C#ta iki kayan noktal tip tanmlanyor: float ve
double. Bunlar srasyla tek ve ift duyarlkl saylar simgelerler. Bu ikisinden double,
genellikle daha yaygn olarak kullanlr,
double tipinde bir deikeni deklare etmek iin aadakine benzer bir ifade kullann:
double result;
Burada result, double tipindeki deikenin ismidir, result deikeni kayan noktal
bir tipte olduu iin 122.23, 0.034 veya -19.0 gibi deerleri tutabilir.
int ve double arasndaki fark daha iyi anlamak iin aadaki program deneyin:
/*
Bu program, int ve double arasindaki
farki ortaya koyar.
*/
using System;
class Example3 {
public static void Main() {
int ivar; // bus bir int degisken deklare eder
double dvar; //bu, kayan noktal bir degisken deklare eder
ivar = 100; // ivar'a 100 degerini atar
dvar = 100,0; // dvar'a 100.0 degerini atar
Console.WriteLine("Original value of ivar: " + ivar);
Console.WrteLine("Original value of dvar: " + dvar);
Console.WriteLine(); // bos bir satir basar
// simdi, her ikisini de 3e bol
ivar = ivar / 3;
dvar = dvar / 3.0;
HERKES N C#
KISIM I C# DL
38
Console.WriteLine(ivar after division: + ivar);
Console.WriteLine(dvar after division: + dvar);
}
}
Bu programn kts aada gsterilmitir:
Original value of ivar: 100
Original value of dvar: 100
ivar after division: 33
dvar after division: 33.3333333333333
Grdnz gibi, ivar 3 ile blndnde tamsay blme ilemi gerekletiriliyor ve
sonu 33 oluyor - ondalk ksm anlyor. Ancak, dvar 3 ile blndnde ondalk ksm
korunuyor.
Programda gsterildii gibi, bir programda kayan noktal bir deer belirtmek istiyorsanz
ondalk noktay dhil etmelisiniz. Eer dhil etmezseniz, sz konusu deer tamsay olarak
yorumlanacaktr. rnein, C#ta 100 deeri bir tamsaydr; fakat 100.0 ise kayan noktal bir
deerdir.
Programda dikkat edilecek bir baka yeni durum daha var. Bo bir satr yazmak iin
WriteLine() argmansz olarak armanz yeterlidir.
Kayan noktal veri tipleri genellikle, ondalk bileenlerin sk sk gerekli olduu gerek
dnyaya ait niceliklerle alrken kullanlr. rnein, aadaki program dairenin alann
hesaplyor. Program pi iin 3.1416 deerini kullanyor.
// Bir dairenin alanini hesaplar.
using System;
class Circle {
static void Main() {
double radius;
double area;
radius = 10.0;
area = radius * radius * 3,1416;
Console.WriteLine("Area is " + area);
}
}
Bu programn kts yledir:
Area is 314.16
phesiz, dairenin alan kayan noktal veriler kullanlmadan tam olarak hesaplanamazd.
BLM 2: C#A GENEL BR BAKI
HERKES N C#
39
ki Kontrol fadesi
Bir metodun iinde kontrol, yukardan aaya doru bir ifadeden dierine geerek ilerler.
Ancak, bu ak C# tarafndan desteklenen eitli program kontrol ifadeleri kullanarak
deitirmek de mmkndr. Kontrol ifadelerine daha sonra yakndan gz atacak olmamza
ramen, iki tanesini burada ksaca tantacaz, nk rnek programlar yazmak iin bunlar
kullanacaz.
if fadesi
C#n koul ifadesini kullanarak programn bir parasn seerek altrabilirsiniz. Bu
koul ifadesi if'dir. C#'taki if ifadesi dier dillerdeki if ifadesine ok benzer ekilde alr.
rnein, C#taki if ifadesi C, C++ ve Java'daki if ifadeleriyle ayn sz dizimine sahiptir. Bu
ifade en basit ekliyle yledir:
if(koul) ifade;
Burada, koul bir Boolean (yani, true (doru) veya false (yanl)) deyimdir. Eer
koul doruysa, ifade gereklenir, koul yanl ise ifade atlanr. te bir rnek;
if (10 < 11) Console.WriteLine("10 is less than 11");
Bu rnekte 10, 11den kk olduu iin koul deyimi doru olur ve WriteLine()
gereklenir. Ancak, bir de aadakine bakn:
if (10 < 9) Console.WriteLine(this won't be displayed");
Bu durumda 10, 9dan kk deildir. Yani, WriteLine() ars gereklenmeyecektir.
C#, koul deyimlerinde kullanlan ilikisel operatrlerin tam kadro tanmn ierir. Bunlar
aada gsterilmitir:
Operatr Anlam
< Kktr
Byktr
>= Byktr veya eittir
== Eittir
!= Eit deildir
Aada, if ifadesini gsteren bir program rnei bulunuyor:
// if'i tanitir.
using System;
class IfDemo {
public static void Main() {
HERKES N C#
KISIM I C# DL
40
int a, b, c;
a = 2;
b = 3;
if(a < b) Console.WriteLine("a is less than b");
// bu, ekranda hicbir sey gstermez
if(a == b) Console.WriteLine("you won't see this"};
Console.WriteLine();
c = a - b; // c, -1 degerini icerir
Console.WriteLine(c contains 1);
if(c >= 0) Console.WriteLine(c is non-negative");
if(c < 0) Console.WriteLine("c is negative");
Console.WriteLine();
c = b - a; // c simdi 1 degerini icerir
Console.WriteLine("c contains 1");
if(c >= 0) Console.WriteLine( "c is non-negative");
if(c < 0) Console.WriteLine("c is negative");
}
}
Bu programn kts aadaki gibidir;
a is less than b
c contains -1
c is negative
c contains 1
c is non-negative
Bu programdaki bir baka noktaya dikkat edin. Aadaki satr, virgl ile ayrlm bir liste
kullanarak a, b ve c isimli deiken deklare eder:
int a, b, c;
nceden bahsedildii gibi, ayn tipte iki veya daha fazla deikene ihtiyacnz varsa bu
deikenler tek bir ifade ile deklare edilebilir. Tek yapmanz gereken, deiken isimlerini
virgl ile ayrmaktr.
for Dngs
Kod paralarn bir dng oluturarak tekrar tekrar altrabilirsiniz, C#, ok eitli
dng ifadelerinden oluan gl dng zelliklerine sahiptir. Burada for dngsn ele
atacaz. C, C++ veya Java'ya ainaysanz, C#taki for dngsnn bu dillerdekiyle ayn
ekilde altn renmek sizi mutlu edecektir, for dngsnn en basit ekli aada
gsterilmitir:
BLM 2: C#A GENEL BR BAKI
HERKES N C#
41
for (balang; koul; iterasyon) ifade;
En yaygn ekliyle dngnn balang blm, dng kontrol deikenine ilk deer
atar. koul, dng kontrol deikenini test eden bir Boolean deyimdir. Bu testin sonucu
doruysa for dngs iterasyona devam eder. Testin sonucu yanlsa dng sona erer.
iterasyon deyimi, dngnn her iterasyonunda dng kontrol deikeninin ne ekilde
deieceini belirler. te, for dngsn gz nnde canlandran ksa bir program:
// for dongusunu tanitir.
using System;
class ForDemo {
public static void Main() {
int count;
for (count = 0; count < 5; count = count + 1)
Console.WriteLine("This is count: * + count);
Console.WriteLine("Done!");
}
}
Programn kts aada gsterilmitir:
This is count: 0
This is count: 1
This is count: 2
This is count: 3
This is count: 4
Done!
Bu rnekte count, dng kontrol deikenidir, count, for dngsnn ilk deer
atamas blmnde 0 deerini alr. Her iterasyonun banda (ilk iterasyon da dhil olmak
zere) count < 5 koul testi gerekletirilir. Bu testin sonucu doruysa, WriteLine()
ifadesi gereklenir, sonra da dngnn iterasyon blm altrlr. Bu ilemler koul testi
yanl olana kadar srer. Koul testi yanl olduunda kontrol, dngnn sonuna geer.
lgin olan udur: Profesyonel olarak yazlm C# programlarnda, nceki rnekte
gsterildii gibi dngnn iterasyon blmne hemen hemen hi rastlamazsnz. Yani, u tr
ifadelerle nadiren karlarsnz:
count = count + 1;
Bunun nedeni, C#ta bu ilemi daha verimli biimde gerekletiren zel bir artrma
operatrnn mevcut olmasdr. Artrma operatr ++dr (yani, pe pee art iaretleri).
Artrma operatr, operandn bir artrr. Artrma operatrn kullanarak nceki ifade u
ekilde yazlabilir:
count++;
HERKES N C#
KISIM I C# DL
42
Bylece, nceki programdaki for dngs genellikle yle yazlr:
for (count = 0; count < 5; count++)
Bunu denemek isleyebilirsiniz. Dngnn ncekiyle tamamen ayn ekilde altn
greceksiniz.
C#ta ayrca, - - olarak belirtilen eksiltme operatr de bulunur. Bu operatr, operandn
bir azaltr.
Kod Bloklarn Kullanmak
C#'n bir baka temel esi kod bloudur. Bir kod blou iki veya daha fazla ifadenin
gruplanmasdr. Bu, ifadeleri al ve kapan kme parantezleri iine alarak gerekletirilir.
Kod blounun hazrlanmasyla, sz konusu kod blou arlk tek bir ifadenin kullanlabilecei
her yerde kullanlabilecek olan mantksal bir birim halini alr. rnein, bir blok if ve for
ifadeleri iin hedef olabilir. u if ifadesine bir gz atn:
if (w < h) {
v = w * h;
w = 0;
}
Burada w, hden kkse bloun iindeki her iki ifade de gereklenecektir. Bylece,
bloun iindeki iki ifade mantksal bir birim olutururlar; bir ifade ancak dieri de
gereklendiinde gereklenebilir. Buradaki temel konu, iki veya daha fazla ifadeyi ne zaman
birbirine balamanz gerekse, bunu bir blok oluturarak yapabilecek olmanzdr. Kod bloklar
algoritmalarn birounun daha net ve verimli uygulanmasna imkn verir.
imdi, sfra blmeyi nleyen bir kod blou kullanan bir programa gz atalm:
// Bir kod blogunu gosterir.
using System;
class BlockDemo {
public static void Main() {
int i, j, d;
i = 5;
j = 10;
// bu ifin hedefi bir kod blogudur.
if (i != 0) {
Console.WriteLine("i does not equal zero");
d = j / i;
Console.WriteLine( j / i is + d);
}
}
}
BLM 2: C#A GENEL BR BAKI
HERKES N C#
43
Bu programn kts u ekildedir:
i does not equal to zero
j / i is 2
Bu rnekte if ifadesinin hedefi tek bir ifade deil, bir kod bloudur, ifi kontrol eden
koul doruysa (bu rnekle olduu gibi), bloun iindeki ifade gereklenecektir. i
deikenine sfr deerini vermeye aln ve sonucu gzleyin.
te bir baka rnek. Bu kez, 1den 10a kadar saylarn toplamlarn ve arpmlarn
hesaplamak iin kod blou kullanlyor.
// 1den 10a kadar sayilarin toplam ve carpimlarini hesaplar.
using System;
class ProdSum {
static void Main() {
int prod;
int sum;
int i;
sum = 0;
prod = 1;
for (i = 1; i
HERKES N C#
KISIM I C# DL
44
Bildiiniz gibi bir blok, al ve kapan kme parantezleri ile evrelenmi mantksal
olarak birbirine bal bir takm ifadelerden oluur. Blok noktal virgl ile sona ermez. Blok,
her biri noktal virgl ile sona eren bir grup ifadeden olutuu iin bloun noktal virgl ile
bitmemesi mantkldr. Noktal virgl yerine kapan kme parantezi bloun sonuna iaret
eder.
C# satrn sonunu ifadenin sonu olarak alglamaz - sadece noktal virgl ifadeyi
sonlandrr. Bu nedenle, ifadeyi satr zerinde nereye yerletirdiiniz nemli deildir.
rnein. C#ta u,
x = y;
y = y + 1;
Console.WriteLine(x + " " + y) ;
aadaki ile ayndr:
x = y; y = y + 1; Console.WriteLine(x + " " + y);
stelik, bir ifadeyi oluturan elemanlar da tek tek ayr satrlara yerletirebilirsiniz.
rnein, aadaki tamamen kabul edilebilir:
Console.WriteLine("This is a long line of output" +
x + y + z +
more output);
Uzun satrlar bu ekilde blmek, genellikle programlan daha okunakl klar. Ayrca ar
uzun satrlarn bir sonraki satra tamasn da nlemeye yardmc alabilir.
Girintileme Altrmalar
nceki rneklerde, belirli ifadelerin girintili olduuna dikkat etmisinizdir. C# serbest
formlu bir dildir. Yani, ifadeleri satr zerinde birbirine kyasla nereye yerletirdiiniz nemli
deildir. Ancak, yllar getike, ok okunakl programlara imkn veren ortak ve onaylanm
bir girintileme stili gelimitir. Bu kitaptaki rnekler bu stili izliyorlar; sizin de bu ekilde
yapmanz tavsiye edilir. Bu stili kullanarak, her al kme parantezinden sonra girintiyi bir
seviye artrrsnz ve her kapan kme parantezinden sonra da bir seviye azaltrsnz. Kimi
ifadeler ilave baz girintileri de tevik eder; bunlar daha sonra ele alnacaktr.
TABLO 2.1: C# Anahtar Kelimeleri
abstract as base bool break
byte case catch char checked
class const continue decimal default
delegate do double else enum
event explicit extern false finally
BLM 2: C#A GENEL BR BAKI
HERKES N C#
45
fixed float for foreach goto
if implicit in int interface
internal is lock long namespace
new null object operator out
override params private protected public
readonly ref return sbyte sealed
short sizeof stackalloc static string
struct switch this throw true
try typeof unit ulong unchecked
unsafe ushort using virtual volatile
void while
C# Anahtar Kelimeleri
C# dilinde tanml halihazrda 77 anahtar kelime mevcuttur (Tablo 2.1 'e bakn). Bu
anahtar kelimeler, operatr ve separatr szdizimleriyle birletirilerek C# dilinin tanmn
olutururlar. Bu anahtar kelimeler deiken, snf ve metot ismi olarak kullanlamazlar.
Tanmlayclar
C#ta bir tanmlayc (identifier), bir metoda, deikene veya kullanc tarafndan
tanmlanan herhangi baka bir eye atanan isimdir. Tanmlayclar bir karakterden birka
karaktere kadar deien uzunluklarda olabilir. Deiken isimleri alfabenin herhangi bir harfi
ile veya alt izgi (_) ile balayabilir. Sonra harf, rakam veya alt izgi ile devam edebilir. Alt
izgi, deiken isminin okunaklln artrmak iin kullanlabilir; line_count rneinde
olduu gibi. Byk ve kk harfler farkldr; yani, C#ta myvar ve MyVar ayr isimlerdir.
Kabul edilebilir tanmlayclar iin u rnekler verilebilir:
Test x y2 MaxLoad
up _top my_var sample23
Bir tanmlaycnn rakam ile balamayacan hatrnzdan karmayn. Yani, rnein 12x
geerli deildir. simlendirilen enin anlamn ya da kullanmn yanstan tanmlayc isimleri
kullanmak, iyi bir programlama alkanldr.
C# anahtar kelimelerinden hi birini tanmlayc smi olarak kullanamyor olmanza
ramen C#, bir anahtar kelimenin nnde @ kullanmanza izin vererek sz konusu anahtar
kelimenin geerli bir tanmlayc olmasn mmkn klar. rnein, @for geerli bir
tanmlaycdr. Bu rnekte, tanmlayc aslnda fordur; @ dikkate alnmaz. te, @
tanmlaycsnn kullanmn gz nnde canlandran bir program:
// @ tanimlayicisini gostermektedir.
using System;
HERKES N C#
KISIM I C# DL
46
class IdTest {
static void Main() {
int @if; // ifi tanimlayici olarak kullan
for (@if = 0; @if < 10; @if++)
Console.WriteLine(@if is " + @if);
}
}
Burada gsterilen kt, @ifin gerekten de bir tanmlayc olarak yorumlandn
kantlamaktadr:
@if is 0
@if is 1
@if is 2
@if is 3
@if is 4
@if is 5
@if is 6
@if is 7
@if is 8
@if is 9
Drst olmak gerekirse, zel amalar hari tanmlayclar in @ 1le nitelenen anahtar
kelimeler kullanmak tavsiye edilmez. Ayrca, @ herhangi bir tanmlaycnn nnde de
kullanlabilir, fakat bu kt bir programlama alkanl olarak dikkate alnr.
C# Snf Ktphaneleri
Bu blmde gsterilen rnek programlar C#n standart metotlarnn ikisinden
yararlanyor: WriteLine() ve Write(). nceden bahsedildii gibi, bu metotlar System
isim uzaynn bir paras olan Console snfnn yeleridir. System isim uzay ise .NET
Frameworkn snf ktphaneleri ile tanmlanr. Bu blmde daha nceden akland gibi
C# ortam; I/O, karakter katarlarnn ele alnmas, a uygulamalar ve GUI gibi ilemler iin
destek salamak amacyla, .NET Framework snf ktphanelerine dayanmaktadr. Yani, C#
btn olarak C# dilinin kendisinin ve .NET standart snflarnn birleiminden olumaktadr.
Daha sonra greceiniz zere, herhangi bir C# programnn paras olan ilevselliin byk
blmn snf ktphaneleri salar. Gerekten, C# programcs olmann bir paras da bu
snf ktphanelerini kullanmay renmektir. Ksm I boyunca .NET snf ktphanelerinin
ve metotlarnn eitli elemanlar ele alnyor. Ksm IIde .NET ktphanesi daha ayrntl
inceleniyor.
N C B L M
VER TPLER,
LTERALLER VE
DEKENLER
3
HERKES N C#
KISIM I C# DL
48
Bu blmde C#n temel esi inceleniyor: Veri tipleri, literaller ve deikenler. Genel
olarak, bir dilin sunduu veri tipleri, bu veri tiplerinin uygulanabilecei problem snflarn
tanmlar, Tahmin edebileceiniz gibi, C# zengin