herkes İçin c#

786

Upload: goerkem-goekhan

Post on 01-Dec-2015

306 views

Category:

Documents


24 download

TRANSCRIPT

  • 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