786

KISIM I C# DİLİ - kodleon.com°çin-C.pdf · HERKES ĠÇĠN C# 4 KISIM I C# DĠLĠ Metottan DönüĢ ………………………………………………………………………………

  • Upload
    haquynh

  • View
    232

  • Download
    0

Embed Size (px)

Citation preview

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.

http://www.osborne.com/

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.

http://www.osborne.com/

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

http://eitample.es/http://exairple.cs/

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.

http://example.cs/

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 bir standart veri tipleri kmesi ierir. Bu, C#

ok eitli uygulamalar iin uygun klar. Bu tiplerin herhangi birinden deikenler

oluturabilirsiniz. Her tipten sabit de belirtebilirsiniz. C# dilinde bu sabitler literal olarak

adlandrlr.

Veri Tipleri Neden nemlidir?