visual c# turkish by muhammed medeni baykal

Upload: ugur-kazdal

Post on 30-May-2018

233 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    1/41

    1

    Microsoft C#

    Blm 2: C# Szdizimi

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    2/41

    2

    Blm zeti (Slayt 3)

    Bu blmde etkileyici yazlm yazmak zere C# programlama dilini reneceiz. C# programnn temel yapsn

    aratrdktan sonra C# szdiziminin tmne bir gz atacaz.

    kinci ders deikenler hakknda olacak. Deer tr deikenlerinin nasl ifade edileceini ve kullanlacanreneceiz. Sonraki blmlerde nesneye ynelik programlama hakknda konutuumuz srada referans trleri ilealyor olacaz. Diziler(array), struct, enum gibi youn konulara da bu blm ierisinde deiniyor olacaz.

    Ders 3, iki eit kontrol yaps hakknda: if ve switch. Kullanmlarn detayl bir ekilde reneceiz. Drtyineleme(dng) deyimi olan do, while, for ve foreach ders drdn konusunu oluturmakta. Beinci dersteparametreleri de ieren ilevleri ifade etme ve arma konularna deineceiz.

    Son ders alma sresi istisnai durumlarn idare etmek hakknda olacak. stisna snf ve throwing istisnas da budersin kapsamnda olacak.

    Ders 1: Merhaba Dnya (Slayt 4)

    Bir nceki blmn sonunda bir merhaba dnya rnei grmtk. Fakat bu kez biraz daha farkl olacak. Bu kezVisual Studio yerine Notepad kullanarak merhaba dnya uygulamas yazacaz. Sonrasnda yine Visual Studioolmadan bu kez komut satrn kullanarak bu uygulamay derleyeceimizi reneceiz.

    Bu dersin amac C# programnn yaps hakknda daha fazlasn renip derleme gibi temel zelliklere daha fazlailgi gstermektir. Esasnda tm bu tarz kodlar Notepad ile yazabilirsiniz fakat elbette ikiden fazla snftan dahafazlasn barndran uygulamarda Visual Studio olmadan bunu yapmak olduka karmak ve zor olacaktr.

    Bir C# Programnn Yaps (Slayt 5)using System;class Merhaba{

    //this is a commentpublic static void Main(){

    Console.WriteLine(Merhaba Dnya);}

    }

    Merhaba snf

    Her kod blou bir yap ile rtmelidir. C#da ki yapnn ismi snf tr (Aslnda C# ierisindeki her yap bir snftr

    fakat bu daha ok teknik bir tartmadan te felsefi bir boyuttadr ve bu kitabn kapsamnn tesindedir). Kodbloklarnn ayrca ssl ayralar { } ile donatldn bir tarafa not ediniz. Snflar hakknda ok daha fazlasn dahasonra greceiz.

    Ayrca C#ta ki bir satr noktal virgl ile (;) sona erer. Bir dizi, trnak iaretleri ()ile kapatlr. Diziler bir satrdan

    fazla geniletilemez. Bir art iareti (+) ile sonlanmal ve gei yapmaldrlar.

    rnek:

    string s;

    s = this is a string sample that +is longer than a line;

    using System;

    System bir ad uzaydr(namespace). Bir ad uzay tm .NET Frameworkn hiyerarik bir listesidir. ki amac vardr;tm snf isimlerini esiz ve farkl klmak ve ayrca mantksal alt kmeleri gruplarken daha eriilebilir olmalarnsalamak. rnein, snflarla ilgili tm veriyi Sytem.Data altnda bulabilirsiniz. System yapnn kk ad uzaydr.

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    3/41

    3

    using in bize salad ise snflarn niteliklerini daha kolay hale getirmesidir. rnein; Console, System altndakibir snftr. Bu yzden System.Console gibi tam ismi tanmlamanz gerekir. using deyimi tam nitelendirmeyeduyulan ihtiyac ortadan kaldrr.

    Microsoft C# Language Specification using i u ekilde tanmlyor:

    Bir using-namespace-directive ad uzay ierisinde bulunan trleri her trn tanmlaycsnn nitelenmeksizinkullanlmasna izin vererek aniden kapanan derleme nitelerine veya ad uzay gvdelerine geirir.

    using-namespace-directive:using namespace-name ;

    using-namespace-directive ieren bir derleme nitesindeki veya ad uzay gvdesindeki ye ifadelerinde, verilenad uzay ierisinde bulunan trler dorudan referans edilebilir. rnein:

    namespace N1.N2{

    class A {}}namespace N3{

    using N1.N2;class B: A {}

    }

    Yorumlar

    Bir programlama dilinin en nemli yanlarndan biri de yorumlamadr. Gelitiriciler daima almalarnyorumlamak adna cesaretlendirilmelidirler. Bu kod dkmantasyonunun en etkili yntemlerinden biridir.

    C# da bir satra ift blme iareti (//) veya bir bloa / ve */ iaretlerinin arasn kullanarak yorum

    ekleyebilirsiniz. rnek:

    //bu bir tekli yorum satrdr ve derleme srasnda derleyici tarafndan dikkate

    alnmaz.//ve istediiniz zaman kullanabilirsiniz.

    /*Eer birden fazla satrda yorum yazmak istiyorsanzoklu satr yorumBir defada bu ekilde yazabilirsiniz.Ve bu yndem daha iyi bir zmdr.*/

    Yorumlanan satrlar derlenmez.

    Main yntemi

    C# ile temel trde uygulamay yazabilirsiniz: Windows uygulamalar, konsoluygulamalar ve snf ktphanleri.

    Bunlardan ilk ikisi altrlabilir( ilk blmde .NET zerinde konuurken aklamtk) sonraki ise bir dieruygulama tarafndan kullanlr.

    C# altrlabilirleri(executables) zel bir ynteme ihtiya duyarlar. Buna giri noktas denir ve tek bir imzaya

    sahiptir.

    (tamamen nitelendirilmi yntem ismi):

    static void Main();

    Bu yntem tam olarak Maini temsil eden byk M harfi ile ifade edilmelidir nk C# derleyicisinin tam olarak

    arad da budur. Ayrca statik de olmas gerekir; nk bu ekilde bir rnee gereksinim duymaz, ki balang

    ncesinde bir uygulama olmadndan bu anlamsz olurdu, dolaysyla da bir rnek herhangi ekilde bir rnek

    olamaz. Fakat bu daha sonra aratracamz bir balk olacak.

    Dip satrda, C# ile Windows veya konsol uygulamalar yazarken bir Main yntemi eklemeyi unutmamalsnz.

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    4/41

    4

    Konsol Snf (Slayt 6)

    System.Console snf konsol uygulamalar iin standart input (girdi), output (kt), ve hata streamlerini temsileder. Konsol bir kullancnn iletim sistemi ile veya bir bilgisayar klavyesini kullanp metin girii ve k yaparakbir metin tabanl konsol uygulamas ile iletiim kurabilen bir iletim sistemi penceresidir.rnein, Windowsta bukonsola komut satr penceresi denir ve MS-DOS komutlarn kabul eder. Konsol snf konsoldan karakterlerokuyabilen ve yazabilen uygulamalara temel destei salar.

    Konsol snfn sunucu uygulamalar gibi gzetimsiz uygulamalardan kt almak iin kullanmamalsnz. Benzer bir

    ekilde,

    Write(yaz)ve WriteLine(satra yaz) gibi yntemlere olan arlarn Windows uygulamalarnda bir etkisibulunmamaktadr.

    rnek:

    public static void Main(string[] args){

    Console.Write("Hola ");Console.WriteLine("Mundo!");Console.WriteLine("What is your name: ");String name = Console.ReadLine();Console.Write("Buenos Dias, ");Console.Write(name);Console.WriteLine("!");

    }

    Console Metodlar

    Name Description

    Beep Ar Yklenmi. Speakerden beep sesi kartr.

    Clear Ekran temizler.

    Read Ekrandan sonraki karakteri okur.

    ReadKey Ar Yklenmi. Kullancnn basaca tuu okur.

    ReadLine Kullanacnn girecei satr okur.

    ResetColor Ekran rengini eski haline dndrr.

    SetCursorPosition mlecin pozisyonunu deitirir.

    SetWindowPosition Console penceresinin, ekranndaki konumunu ayaralr.

    SetWindowSize Console pencerisinin boyularn ayarlar

    Write Ar Yklenmi. Ekrana bir metin basar.

    WriteLine Ar Yklenmi. Ekrana birmetin basar ve ardndan da yeni satra geer.

    Console zellikleri

    Name Description

    BackgroundColor Consoleun arkaplan rengini deitirir ya da dndrr.

    CapsLock

    CAPS LOCK tuunun durumunu renir.

    CursorLeft Gets or sets the column position of the cursor within the buffer area.

    http://msdn.microsoft.com/en-us/library/system.console.beep.aspxhttp://msdn.microsoft.com/en-us/library/system.console.beep.aspxhttp://msdn.microsoft.com/en-us/library/system.console.clear.aspxhttp://msdn.microsoft.com/en-us/library/system.console.clear.aspxhttp://msdn.microsoft.com/en-us/library/system.console.read.aspxhttp://msdn.microsoft.com/en-us/library/system.console.readkey.aspxhttp://msdn.microsoft.com/en-us/library/system.console.readline.aspxhttp://msdn.microsoft.com/en-us/library/system.console.readline.aspxhttp://msdn.microsoft.com/en-us/library/system.console.resetcolor.aspxhttp://msdn.microsoft.com/en-us/library/system.console.resetcolor.aspxhttp://msdn.microsoft.com/en-us/library/system.console.setcursorposition.aspxhttp://msdn.microsoft.com/en-us/library/system.console.setcursorposition.aspxhttp://msdn.microsoft.com/en-us/library/system.console.setwindowposition.aspxhttp://msdn.microsoft.com/en-us/library/system.console.setwindowposition.aspxhttp://msdn.microsoft.com/en-us/library/system.console.setwindowsize.aspxhttp://msdn.microsoft.com/en-us/library/system.console.setwindowsize.aspxhttp://msdn.microsoft.com/en-us/library/system.console.write.aspxhttp://msdn.microsoft.com/en-us/library/system.console.write.aspxhttp://msdn.microsoft.com/en-us/library/system.console.writeline.aspxhttp://msdn.microsoft.com/en-us/library/system.console.writeline.aspxhttp://msdn.microsoft.com/en-us/library/system.console.backgroundcolor.aspxhttp://msdn.microsoft.com/en-us/library/system.console.backgroundcolor.aspxhttp://msdn.microsoft.com/en-us/library/system.console.capslock.aspxhttp://msdn.microsoft.com/en-us/library/system.console.capslock.aspxhttp://msdn.microsoft.com/en-us/library/system.console.cursorleft.aspxhttp://msdn.microsoft.com/en-us/library/system.console.cursorleft.aspxhttp://msdn.microsoft.com/en-us/library/system.console.cursorleft.aspxhttp://msdn.microsoft.com/en-us/library/system.console.capslock.aspxhttp://msdn.microsoft.com/en-us/library/system.console.backgroundcolor.aspxhttp://msdn.microsoft.com/en-us/library/system.console.writeline.aspxhttp://msdn.microsoft.com/en-us/library/system.console.write.aspxhttp://msdn.microsoft.com/en-us/library/system.console.setwindowsize.aspxhttp://msdn.microsoft.com/en-us/library/system.console.setwindowposition.aspxhttp://msdn.microsoft.com/en-us/library/system.console.setcursorposition.aspxhttp://msdn.microsoft.com/en-us/library/system.console.resetcolor.aspxhttp://msdn.microsoft.com/en-us/library/system.console.readline.aspxhttp://msdn.microsoft.com/en-us/library/system.console.readkey.aspxhttp://msdn.microsoft.com/en-us/library/system.console.read.aspxhttp://msdn.microsoft.com/en-us/library/system.console.clear.aspxhttp://msdn.microsoft.com/en-us/library/system.console.beep.aspx
  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    5/41

    5

    CursorSize Gets or sets the height of the cursor within a character cell.

    CursorTop Gets or sets the row position of the cursor within the buffer area.

    CursorVisible Gets or sets a value indicating whether the cursor is visible.

    Error Gets the standard error output stream.

    ForegroundColor Gets or sets the foreground color of the console.

    LargestWindowWidth Gets the largest possible number of console window columns, based on the

    current font and screen resolution.

    NumberLock Gets a value indicating whether the NUM LOCK keyboard toggle is turned

    on or turned off.

    Title Gets or sets the title to display in the console title bar.

    TreatControlCAsInput Gets or sets a value indicating whether the combination of theControl

    modifier key andCconsole key (CTRL+C) is treated as ordinary input or as

    an interruption that is handled by the operating system.

    WindowHeight Gets or sets the height of the console window area.

    WindowLeft Gets or sets the leftmost position of the console window area relative to the

    screen buffer.

    WindowTop Gets or sets the top position of the console window area relative to the

    screen buffer.

    WindowWidth Gets or sets the width of the console window.

    Console.ReadKey rnei

    static void Main(string[] args){

    ConsoleKeyInfo cki;cki = Console.ReadKey();Console.WriteLine(cki.Key);Console.WriteLine(cki.Modifiers);

    }

    Console.WriteLine rnei

    int i = 12;Console.WriteLine("You are number {0}", i);

    Parameter of the WriteLine ynteminin parametresi bir eit dizi (string) balamasdr. Bu stringde {0} stringtensonraki ilk parametre ile yer deitirecek ve bu ekilde devam edecek. Biimlendirme zellikli string snf da aynetkiyi vermektedir.

    String.Format yntemi

    Bu metod belirtilen bir dizi iindeki her bir format nesnesi yerine, karlk gelen bir nesnenin deerine denk metni

    getirir. Format parametresi, sfr ya da daha fazla dizinli yer tutucu ile birletirilmi olan sfr ya da daha fazlametin iletiminden oluur. Buyer tutucular, bu metodun parametre listesindeki bir objeye karlk gelen format

    nesneleri olarak adlandrlr. Biimlendirme sreci, her bir nesnenin yerine, karlk gelen objenin deerine ait

    metin temsilini getirir.

    http://msdn.microsoft.com/en-us/library/system.console.cursorsize.aspxhttp://msdn.microsoft.com/en-us/library/system.console.cursorsize.aspxhttp://msdn.microsoft.com/en-us/library/system.console.cursortop.aspxhttp://msdn.microsoft.com/en-us/library/system.console.cursortop.aspxhttp://msdn.microsoft.com/en-us/library/system.console.cursorvisible.aspxhttp://msdn.microsoft.com/en-us/library/system.console.cursorvisible.aspxhttp://msdn.microsoft.com/en-us/library/system.console.error.aspxhttp://msdn.microsoft.com/en-us/library/system.console.foregroundcolor.aspxhttp://msdn.microsoft.com/en-us/library/system.console.foregroundcolor.aspxhttp://msdn.microsoft.com/en-us/library/system.console.largestwindowwidth.aspxhttp://msdn.microsoft.com/en-us/library/system.console.largestwindowwidth.aspxhttp://msdn.microsoft.com/en-us/library/system.console.numberlock.aspxhttp://msdn.microsoft.com/en-us/library/system.console.numberlock.aspxhttp://msdn.microsoft.com/en-us/library/system.console.title.aspxhttp://msdn.microsoft.com/en-us/library/system.console.title.aspxhttp://msdn.microsoft.com/en-us/library/system.console.treatcontrolcasinput.aspxhttp://msdn.microsoft.com/en-us/library/system.console.treatcontrolcasinput.aspxhttp://msdn.microsoft.com/en-us/library/system.consolemodifiers.control.aspxhttp://msdn.microsoft.com/en-us/library/system.consolemodifiers.control.aspxhttp://msdn.microsoft.com/en-us/library/system.consolemodifiers.control.aspxhttp://msdn.microsoft.com/en-us/library/system.consolekey.c.aspxhttp://msdn.microsoft.com/en-us/library/system.consolekey.c.aspxhttp://msdn.microsoft.com/en-us/library/system.consolekey.c.aspxhttp://msdn.microsoft.com/en-us/library/system.console.windowheight.aspxhttp://msdn.microsoft.com/en-us/library/system.console.windowheight.aspxhttp://msdn.microsoft.com/en-us/library/system.console.windowleft.aspxhttp://msdn.microsoft.com/en-us/library/system.console.windowleft.aspxhttp://msdn.microsoft.com/en-us/library/system.console.windowtop.aspxhttp://msdn.microsoft.com/en-us/library/system.console.windowtop.aspxhttp://msdn.microsoft.com/en-us/library/system.console.windowwidth.aspxhttp://msdn.microsoft.com/en-us/library/system.console.windowwidth.aspxhttp://msdn.microsoft.com/en-us/library/system.console.windowwidth.aspxhttp://msdn.microsoft.com/en-us/library/system.console.windowtop.aspxhttp://msdn.microsoft.com/en-us/library/system.console.windowleft.aspxhttp://msdn.microsoft.com/en-us/library/system.console.windowheight.aspxhttp://msdn.microsoft.com/en-us/library/system.consolekey.c.aspxhttp://msdn.microsoft.com/en-us/library/system.consolemodifiers.control.aspxhttp://msdn.microsoft.com/en-us/library/system.console.treatcontrolcasinput.aspxhttp://msdn.microsoft.com/en-us/library/system.console.title.aspxhttp://msdn.microsoft.com/en-us/library/system.console.numberlock.aspxhttp://msdn.microsoft.com/en-us/library/system.console.largestwindowwidth.aspxhttp://msdn.microsoft.com/en-us/library/system.console.foregroundcolor.aspxhttp://msdn.microsoft.com/en-us/library/system.console.error.aspxhttp://msdn.microsoft.com/en-us/library/system.console.cursorvisible.aspxhttp://msdn.microsoft.com/en-us/library/system.console.cursortop.aspxhttp://msdn.microsoft.com/en-us/library/system.console.cursorsize.aspx
  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    6/41

    6

    Bir veri esinin szdizimi {index[,alignment][:formatString]} dir. Bu szdizimi zorunlu indeks, biimlendirilmienin opsiyonel uzunluk ve yerleimi ve ilgili nesnenin deerinin nasl biimlendirildiini yneten opsiyonel biimbelirleyici karakterlerin stringini belirtir.

    Bir biimlendirilen enin bileenleri u ekildedir:

    index

    Nesne listesindeki hangi enin biimlendirileceini gsteren bir alt deer tamsays. Eer index tarafndanbelirtilen nesne sfr ise, biimlendirilen e bo string ile deitirilecektir ("").

    alignment

    Biimlendirilen deeri ierecek alann en az geniliini gsteren bir semeli alt say deeri. Biimlendirilen deerinuzunluu alignmentdan daha az ise alan boluklarla doldurulur. Alignment deeri olumsuz ise, biimlendirilendeer alan iinde sola dayal; eer olumlu ise biimlendirilen deer saa dayal olur. Alignment deeribelirtilmemise alann uzunluu biimlendirilen deerin uzunluudur. Alignment belirtilmi ise virgl kullanmgerekir.

    formatString

    Semeli bir biim belirleyici satr. Eer formatString belirtilmemise ve ilgili argman IFormattable arayznuyguluyorsa, IFormattable..::.ToString biim satr olarak null (bo deer) kullanlr. Bu nedenle,IFormattable..::.ToString in tm uygulamalarnn null (bo deer) e birbiim satr olarak izin vermesi ve birString nesnesi olarak nesne temsilinin varsaylan biiminin dnne izin vermesi gereklidir.

    nl ve arkal kal ayra karakterleri, '' ve '}', gerekmektedir. Biim zerinde tam bir ayra karakteri kullanm

    iin

    iki nl "" veya arkal "--" ayra karakterlerini kullannz.

    Biim deeri "Thank you for your purchase of {0:####} copies of Microsoft.NET (Core Reference)." olsa,

    ve arg0, 123 deerli bir Int16 ise, dn deeri u ekilde olacaktr:

    "Thank you for your purchase of 123 copies of Microsoft.NET (Core Reference)."

    Biim deeri "Brad's dog has {0,-8:G} fleas." olsa, ve arg0,42 deerli bir Int16 ise, (ve bu rnekte, alt izgiler

    doldurma boluklarn temsil eder) dn deeri u ekilde olacaktr:

    "Brad's dog has 42______ fleas."

    Bu yntem bir nesnenin deerini o nesnenin metin temsiline dntrmek iin ve bu temsili bir string iinegmmek iin .NET Frameworkn karma biimlendirme zelliini kullanr. Karma biimlendirme ile ilgili daha fazlabilgi iin http://msdn.microsoft.com/en-us/library/txafckwd.aspx adresindeki MSDN Library sayfasn ziyaret

    ediniz.

    rnek:

    int i = 123;string bookName = "Programming with Visual Studio 2008";string s;s = string.Format("You have ordered {0} copies of {1} on {2}",

    i, bookName, DateTime.Today.ToShortDateString());Console.WriteLine(s);

    Derleme ve Koturma (Slayt 7)

    Merhaba Dnya adl nceki rnekte Visual Studionun hata ayklama zelliklerinin avantajlarn kullandk. Fakat bukez kendimiz bu derlemeyi yapmalyz. C # derleyicisi, ki ayn zamanda Visual Studio tarafndan da kullanlr, .NET

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    7/41

    7

    Framework SDK ierisinde gelir. Varsaylan bir kurulum ile byk olaslkla Framework klasrlerinin altndabulabileceksiniz.(Microsoft.Net\Framework\version_number_here).

    Eer Visual Studio (Express srmnden daha st) ne sahipseniz veya SDK kurulu ise nceden ayarlanm

    deerlere sahip .NET konsoluna bir ksayolunuz olacaktr.

    csc.exe

    Csc.exe bir C# derleyicisidir. Eer varsa tm ktlarn ve hatalarn ve uyarlarn dkmn komut satrna dker.

    Asgari csc szdizimi derlenmek zere giridosyalarna ihtiya duyar. Bu dersin bandaki cs dosyasn yazmak iin,bir SDK veya bir Visual Studio ya da herhangi bir komut satr an ve csc.exenin bulunduu framework klasrnziyaret edin. Csc.exe ve uzants ile birlikte snf dosyannzn ismini yazn

    rnek:

    ekil 1: csc.exe

    Dosya derlendiinde k u ekilde grnmelidir:

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    8/41

    8

    ekil 2: Baarl derleme sonras csc.exe kts

    Bu rnee gre C: dizini altnda bir hello.exe dosyas olmaldr. Kaynak kodda belirtildii zere exenin ismini

    yazarak bir kt oluturulmaldr:

    ekil 3: Uygulama almas

    Csc.exe ve switch ler

    Target veya ksaca t oluturulacak uygulamann trn belirtir. /target:exe, /target:winexe,

    /target:library gibi seenekleri vardr.

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    9/41

    9

    Out (/out) k dosya ismini belirtir. Eer ayarlanmamsa k dosya ismi ana yntem snf dosyas ile veya ilksnf dosyas ile ayn olacaktr.

    Dier switchler iin cschelp komutunu kullannz.

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    10/41

    10

    Ders 2: Deer Tr Deikenleri (Slayt 8)

    Bu blmde deikenlerle almay reneceiz. Ayrca operatrler ve grme gibi baz temel szdizimizelliklerini de reneceiz.Array ler, enum lar ve struct lar gibi konularda bu blmde bulunmakta.

    Bu dersin ok nemli bir dier konusu ise Common Type System (CTS). CTS, .NETFrameworkn temel zelliklerinden biridir. Ders 2 CTSe bir genel bak ve tanma ile balayacak.

    CTS e Genel Bak(Slayt 9)

    Bu blm CTS kavramn aklar ve dilin uygulanmas esnasnda size yardmc olacak terimlerin tanmn yapar.

    Trlerin Snflandrlmas

    CTS trlerin iki genel kategorisini destekler ve bu kategoriler de kendi ilerinde alt kategorilere blnmtr:

    Deer trleri

    Deer trleri dorudan kendi verilerini ierir, ve deer trleri durumlar kme iinde veya bir yap iindehizada tutulur. Deer trleri yerleik ( alma sresi tarafndan uygulanan) , kullanc tanml veya sralolabilir.

    Referans trleriReferans trleri deerin hafza adresinde bir referans tutar ve alt ynda tutulur.Referans trleri, kendini tanmlayan trler, imle trleri beya arayz trleri olabilirler. Bir referanstrnn eidi kendini tanmlayan trlerin deerlerinden belirlenebilir. Kendini tanmlayan trler ilerdearrayler ve snf trlerine ayrlacaklar. Snf trleri; kullanc tanml snflar, paketlenmi deerli trler vetemsilcilerdir.

    Deer trleri olan deikenlerin herbiri verinin bir kopyasna sahiptirler ve bununla birlikte deiken zerindeyaplan ilemler dier deikenlere etki etmez. Referans tr olan deikenler ise ayn nesneye bavurabilirler, buyzden bir deiken zerinde yaplan ilemler baa bir deikenin bavurduu ayn nesneye etki edebilir.

    Tm trler System.Object taban trnden retilir.

    ekil 4: Tr Snflandrmas

    Deerler ve Nesneler

    Deerler verinin ikili yazmlardr ve trler bu verinin deerlendirilmesine bir yol salar. Bir deer tr dorudantrn verisinin bir ikili yazm olarak tutulur. Bir referans trnn deeri trn verisini temsil eden sral bitlerin

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    11/41

    11

    bulunduu yerdir.

    Her deer btnyle deerin gsteriliini ve deer zerinde tanmlanan ilemleri tanmlayan tam bir tresahiptir. Kendini tanmlayan trlerin deerleri nesneler olarak adlandrlr. Deerini snayarak bir nesnenin tamtrn belirlemek her zaman iin mmkn olsada, bunu bir deer tr veya imle tr ile yapamazsnz. Bir deerbirden fazla tre sahip olabilir. Bir arayz kullanan trn deeri ayn zamanda arayzn trnn de deeriniyanstr. Ayn ekilde, temel bir trden tretilen bir trn deeri ayn zamanda temel trn de deeridir.

    Bu kursun ilerleyen blmlerinde nesne ynelimli programlama zerinde alrken referans trleri ile alyor

    olacaz.

    Deiken simlendirme (Slayt 10:)

    Deikenleri isimlendirirken aadaki kurallar ve nerileri dikkate alnz:

    Kurallar

    Aadakiler C# deikenleri iin isimlendirme kurallardr:

    Her bir deiken ismine bir harf veya alt izgi karakteri ile balaynz. lk karakterden sonra, harfler, rakamlar veya alt izgi karakteri kullannz. Ayrlm anahtar kelimeleri kullanmaynz. zin verilmeyen bir deiken ismini kullanrsanz derleme-zaman hatas alacaksnz.

    neriler

    Deikenlerinizi isimlendirirken aadaki nerileri dikkate almalsnz:

    Tamamen byk harf kullanmndan kannz. Bir alt izgi ile balamaktan saknnz. Ksaltma kullanmndan kannz.

    Deikenleri fade Etmek (Slayt 11)Deikenlerin ifadesi

    Yntemler, zellikler veya indeksleyiciler olarak ifade edilen deikenler yerel deikenler olarak adlandrlrlar.Genellikle, bir yerel deikeni aadaki rnekte de gsterildii zere nce veri trn ardndan deiken isminibelirterek ifade ederiz:

    int itemCount;

    Yine rnekte gsterildii zere bir virgl kullanarak tek bir ifade iersinde birden fazla deiken ifade edebilirsiniz:

    int itemCount, employeeNumber;

    C# da balatlmam deikenleri kullanamazsnz. Aadaki kod bir derleme-zaman hatas verecektir nkloopCount deikenine ilk deer verilmemitir.

    int loopCount;Console.WriteLine ("{0}", loopCount);

    Deikenlere deer atamak

    Bir deikene yeni bir deer atamak iin assignment operator leri kullanrsnz. Daha nce ifade edilmi birdeikene bir deer atamak iin rnekteki gibi assignment operator (=) kullanlr:

    int employeeNumber;employeeNumber = 23;

    rnekteki gibi bir deikeni ifade ettiinizde ayrca balatabilirsiniz de:int employeeNumber = 23;

    Assignment operator karakter tr deikenlerine deer atamada kullanabilirsiniz:

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    12/41

    12

    char middleInitial = 'J';

    Shorthand

    Aadaki kod itemCount olarak adlandrlan bir int deikenini ifade ediyor, ve ona 2 deerini atyor daha sonra

    deerini 40a arttryor.

    int itemCount;

    itemCount = 2;itemCount = itemCount + 40;

    Bir deikeni arttran kod alr, fakat biraz kullanszdr. ki kere arttrlyor olan tanmlayc yazmanz gerekir.

    Basit tanmlayclar iin bu ayn isimli ok fazla sayda tanmlayc olmadndan ok fazla sorun ifade etmez.

    Oysa, arttrlan deeri tanmlamak iin rnekteki gibi gelii gzel karmaklk ifadelerini kullanabilirsiniz:

    items[(index + 1) % 32] = items[(index + 1) % 32] + 40;

    Bu durumlarda, ayn ifadeyi iki kere yazmanz gerektiyse kolayca zm zor bir hatayla karlaabilirsiniz.

    Neyse ki, bu durumu engelleyici bir shorthand formu bulunmaktadr:

    itemCount += 40;items[(index + 1) % 32] += 40;

    Bu Shorthand tm aritmetik operatrler ile almaktadr.

    var += expression; // var = var + expressionvar -= expression; // var = var - expressionvar *= expression; // var = var * expressionvar /= expression; // var = var / expressionvar %= expression; // var = var % expression

    Genel Operatrler(Slayt 11)

    C# bir ifade ierisinde hangi ilemin yaplacan belirleyen sembolleri ieren geni bir takm operatrler salar.

    C# genel aritmetik ve mantksal ilemleri ve slaytta da gsterildii zere dier baz operatrleride ncedentanmlar.Aada bu operatrlerden bazlarnn aklamasn bulabilirsiniz

    Kategori Operatr rnek Aklama

    Aritmetik + 5+5 Topmama. Sonu, 10.+ Merhaba Dnya Birbirine balama. Sonu,

    Merhaba Dnya

    + 7 Tepe Birbirine balama. Sonu,7Tepe

    - 9 2 kartma. Sonu, 7.

    % 10 % 3 Modl. Sonu 1.

    * 11 * 3 arpma. Sonu, 33.

    Mantksal & true & false Mantksal Ve. Sonu false.| true | false Mantksal Veya. Sonu true.

    ^ true ^ true Mantksal XOR. Sonu true.

    ! !false Mantksal Deil. Sonu true.

    && false && true Matksal Ve. Ancak, ilkoperand false ise, ikinci

    operatr ilemez. Dier

    durumlar iin, & operatr

    ile ayndr.

    || true || false Mantksal Veya. lk operand

    true ise, sonkiler gzard

    edilir.likisel == true == false Eit midir? Sonu, false.!= true != false Eit deil midir? Sonu true.

    > 5 > 7 Byktr. Sonu true.

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    13/41

    13

    < 7 < 5 Kktr. Sonu false.

    >= 4>=9 Byk eittir. Sonu false.

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    14/41

    14

    Tamsay aritmetik tamas bir OverflowException durumu ortaya karr veya sonucun en nemli bitlerinidevreden karr (altta grld gibi). Sfra tamsay blm her zaman bir DivideByZeroException durumu

    ortaya karr.

    Floating-point aritmetik tamas veya sfra blnme hibir zaman bir istisna karmaz, nk floating-point trleriIEEE 754 zerine kuruludur ve sonsuzluu ve NaN (Not a Number) temsili hakkna sahiptir.

    Onluk aritmetik tamas her zaman bir OverflowException durumu ortaya karr. Sfra onluk blnme her zamanbir DivideByZeroException durumu kullanr.

    Tamsay tamas belirdiinde ne olaca kontroll veya kontrol olmayan alma kaynanadayanr. Kontroll birkaynakta, bir OverflowException durumu kullanlr. Kontrol olmayan bir kaynakta, sonucun en nemli bitleridevreden karlr ve altrma devam eder. Bylece, C# size tama konusunu ele alma veya grmezden gelmeseeneklerini sunar.

    Aritmetik operatrlere ek olarak, integral trden integral tre datmlar, tamaya neden olabilir (rn. Bir inte bir

    long datmak) ve kontroll ya da kontrolsz yrtmeye tabidir.Ayrca bitwise operatrlerinin ve shift

    operatrlerinin hibir zaman tamaya neden olmayacan da unutmaynz.

    .NET Framework 3.5 ierisinde ki operatrler hakknda daha fazlas iin

    http://msdn.microsoft.com/en-us/library/6a71f45d.aspx adresindeki MSDN Web sayfasn ziyaret ediniz.

    Arrayler(Slayt 13)

    Array ayn trden birok deikeni ieren bir veri yapsdr. Arrayler bir type ile ifade edilirler:

    type[] arrayName;

    C# arrayleri sfr indekslidir yani array indeksleri sfrda balar. C# iindeki arrayler dier popler dillerdekilere

    benzer ekilde alrlar.

    Bununla birlikte bilmeniz gereken bir ka farkllkta mevcuttur.

    Bir arrayi ifade ederken, keli parantezler (*+) typedan sonra gelmelidir, tanmlaycdan sonra deil.Parantezleritanmlaycdan sonra kullanmak C# iinde kurallara uygun bir szdizimi olmaz. Bir baka detay ise, arrayin boyutuC dilinde olduu gibi trnn bir paras deildir. Bu size arrayin uzunluuna bakmakszn arrayi ifade etmeyi veint nesnesinin herhangi bir arrayini ona atamanza izin verir.

    Arrayleri(Dizeleri) fade Etmek

    C# tek boyutlu arrayleri, ok boyutlu arrayleri (dikdrtgen arrayler) ve array-of-arrays (jagged arrayler)i

    destekler.

    Aadaki rnekler farkl trdeki arraylerin nasl ifade edildiini gstermektedir:

    Tek ynl arrayler:

    int[] numbers;

    ok ynl arrayler:

    string[,] names;

    Array-of-arrays (jagged):

    byte[][] scores;

    Yukarda gsterildii gibi arrayleri ifade etmek gerekte arrayleri oluturmak anlamna gelmez.C#da, arrayler

    nesnelerdir (bu blmn ilerleyen ksmnda tartlacak) ve kantlanmaldrlar. Aadaki rnekler arraylerin nasl

    oluturulduunu gstermektedir:

    Tek ynl arrayler:int[] numbers = new int[5];

    ok ynl arrayler:

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    15/41

    15

    string[,] names = new string[5,4];

    Array-of-arrays (jagged):

    byte[][] scores = new byte[5][];for (int x = 0; x < scores.Length; x++){

    scores[x] = new byte[4];}

    Arrayleri Balatmak

    C# ifade esnasnda keli parantez (-) iersindeki ilk deerleri evreleyip arrayleri ilk kullanma hazrlamak iinbasit ve ak baz yollar salar.

    Aadaki rnekler farkl tip arrayleri kullanma hazrlamak iin deiik yntemler gstermektedir.

    Tek Ynl Array

    int[] numbers = new int[5] {1, 2, 3, 4, 5};string[] names = new string[3] {"Matt", "Joanne", "Robert"};

    Arrayin boyutunu u ekilde gzard edebilirsiniz:

    int[] numbers = new int[] {1, 2, 3, 4, 5};

    string[] names = new string[] {"Matt", "Joanne", "Robert"};

    Eer bir tanmlayc salanmsa, yeni operatr de gzard edebilirsiniz:

    int[] numbers = {1, 2, 3, 4, 5};string[] names = {"Matt", "Joanne", "Robert"};

    ok Ynl Array

    int[,] numbers = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} };

    string[,] siblings = new string[2, 2] { {"Mike","Amy"}, {"Mary","Albert"} };

    Ayrca eer bir tanmlayc salanmsa arrayin boyutunu ve yeni operatr gzard edebilirsiniz.

    Jagged Array (Array-of-Arrays)

    int[][] numbers = new int[2][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };

    Ayrca ilk arrayin boyutunu u ekilde gzard edebilirsiniz:

    int[][] numbers = new int[][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };

    veya

    int[][] numbers = { new int[] {2,3,4}, new int[] {5,6,7,8,9} };

    Bir jagged arrayin eleri iin bir tanmlayc szdizimi olmadna dikkat ediniz.

    Array yelerine Eriim

    Array yelerine eriim, C/C++ ierisindeki array yelerine eriim salanmas kadarbasit ve benzerdir.

    numbers[4] = 12;

    for-each yinelemelerinin kullanm

    int[] numbers = {4, 5, 6, 1, 2, 3, -2, -1, 0};

    foreach (int i in numbers){

    System.Console.WriteLine(i);}

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    16/41

    16

    Enumlar(Slayt 13)

    Enum anahtar kelimesi bir saym ifadeetmede kullanlr. Her saym tr char haricinde herhangi bir tamsay trolabilecek bir temel tre sahiptir. Saym elerinin varsaylan temel tr int dir. Aksi istenmedii taktirde, ilksaym 0 deerine sahiptir ve her baarl saymn deeri 1 ykseltilir.

    rnein:

    enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

    Enumlarda eler farkl deerlere sahip olabilirler:

    enum MachineState{

    PowerOff = 0,Running = 5,Sleeping = 10,Hibernating = Sleeping + 5

    }static void EnumSample(){

    MachineState MyState;MyState = MachineState.Running;

    }

    Console.WriteLine(MyState); //Running basar.Console.WriteLine((int)MyState); //5 basar.

    Structlar(Slayt 14)

    Bir struct tr yapclar, sabitleri, alanlar, yntemleri, zellikleri, indeksleyicileri, operatrleri, olaylar ve iietrleri ieren bir deer trdr.

    Aada alanlar ve yntemleri ieren rnek bir struct grmektesiniz. Ayrca ToString() ynteminin iptal edildiine

    de dikkat ediniz.

    struct Employee{

    public string FirstName;public string LastName;public decimal _salary; //gstermek iin public tanmlanmtr.

    public string FullName(){

    return string.Format("{0} {1}", FirstName, LastName);}public decimal Salary{

    get { return _salary; }

    set { _salary = value; }}public override string ToString(){

    return FullName();}

    }static void StructSample(){

    //deer atamaya gerek yok.Employee e;e.FirstName = "Muhammed Medeni";e.LastName = "Baykal";e._salary = 1000;

    Console.WriteLine(e.FirstName + " " + e.LastName); // Kerem zs basar.//bu armlar deer atamay gerektirmektedir.e = new Employee();e.FirstName = "Muhammed Medeni"; //deer atama struct siler.

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    17/41

    17

    e.LastName = "Baykal"; //ve isim tekrar deer olarak atanr.e.Salary = 1000; //zellik(property) arlmas.Console.WriteLine(e.FullName()); //fonksiyon arlmas.Console.WriteLine(e.ToString());

    }

    Struct tr Point, Rectangle ve Color gibi dk nemdeki nesneleri temsil etme konusunda olduka uygundur.Bir pointi bir snf olarak temsil etmek mmkn olsada bir struct baz senaryolarda daha etkin olacaktr.rnein,bir arrayi 1000 Point nesnesiyle ifade ettiinizde, her nesneyi referans edecek ek hafza ayracaksnz. Budurumda, struct kullanm maliyeti drecektir.

    Bir struct iin varsaylan (parametresiz) bir yapcy ifade etmek hatadr. Varsaylan bir yapc her zaman struct

    yelerini varsaylan deerlerine tanmlamak iin sunulur. Bir struct ierisinde bir durum alan tanmlamak hatadr.

    Yeni operatr kullanarak bir struct nesnesi olutururken oluum gerekletirilir ve uygun yapc arlr. Snflarnaksine, structlar yeni operatr kullanmakszn kantlanabilirler. Yeni kullanmazsanz, alanlar atanmam kalacak venesne tm alanlar tanmlanana kadar kullanlamayacaktr.

    Snflar iin kaltm var iken bu structlar iin geerli deildir. Bir struct bakabir struct veya snftan kaltm alamazve bir snfn temeli olamaz. Bununla beraber structlar temel snf Nesnesinden kaltm elde edebilir. Bir structarayzleri uygulayabilir ve bu tpk snflarn yapt gibi olur.

    Tr Dntrme(Slayt 16)

    Ak tr datm

    Bir cast ifadesi kullanarak deiken trlerini aka dntrebilirsiniz. Aadaki rnek longValue deikeninin bir

    cast ifadesi kullanlarak long veri trnden int veri trne dntrldn gsterir:

    using System;class Test{

    static void Main( ){

    long longValue = Int64.MaxValue;int intValue = (int) longValue;Console.WriteLine("(int) {0} = {1}", longValue,_intValue);

    }}

    Bir tama gerekletiinden rnekteki k u ekilde olur:

    (int) 9223372036854775807 = -1

    Bu gibi bir durumdan saknmak iin, bir dnm baarsz olduunda istisnay ykseltmek adna aadaki gibikontroll (checked) deyimini kullanabilirsiniz:

    using System;

    class Test{static void Main( ){

    checked{

    long longValue = Int64.MaxValue;int intValue = (int) longValue;Console.WriteLine("(int) {0} = {1}", longValue, _intValue);

    }}

    }

    rtl tr datm

    Bir int veri trnden bir long veri trne dn rtl bir ilemdir. Bu dntrme her zaman baarl olur ve aslabilgi kaybna sebebiyet vermez. Aadaki rnek intValue deikeninin int trnden long trne dntrlmesinigsterir:

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    18/41

    18

    using System;

    class Test{

    static void Main( ){

    int intValue = 123;long longValue = intValue;Console.WriteLine("(long) {0} = {1}", intValue, _longValue);

    }

    }

    Stringden numbera

    Bir stringi bir numbera dntrmek iin, ilikin numerik trn Parse yntemini kullanmalsnz. Numerik trlerinStatic Parse yntemi bir number string temsilini ilikin tre dntrr. Dntrlen number doru bir biimdedeil ise bir FormatException ortaya kar.

    int i = int.Parse(32);

    TryParse Yntemi

    TryParse yntemi Parse yntemi gibidir, sadece TryParse yntemi dntrme baarsz olursa bir istisna

    kullanmaz.

    Geerli olmayan ve zmlemesi yaplamayan bir olaydaki FormatException denemek iin kullanlacak istisnaidaresi ihtiyacn eler. Eer dntrme baarszsa number 0 deerini alacaktr.

    int i;bool b = int.TryParse("123",out i);Console.WriteLine(i); //prints 123

    int.TryParse("abc", out i);Console.WriteLine(i); //prints 0

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    19/41

    19

    Ders 3: Kontrol Deyimleri (Slayt 17)

    Bu derste en ok kullanlan iki deyimi reneceiz: if ve switch. Bunlar kodunuzun dallanmasn salayan kontroldeyimleridir. Bunlar ayrca seim deyimleri olarak da adlandrlrlar.

    If(Slayt 18)

    ifdeyimi bir Boolean ifadesi temeline dayanan bir altrma iin bir deyim seer. Aadakiformu ele alr:

    if (expression)statement1

    [elsestatement2]

    ne nerede:

    expression : True ve false operatrlerinin ar yklenmesiyle donatl bir bool veya bir tre rtl bir ekildedntrlebilen ifade

    statement1: Eer ifade true ise altrlacak gml deyim(ler). statement2: Eer ifade false ise altrlacak deyim(ler).

    Ifade true ise, statement1 altrlr.Eer semeli else yantmcesi var ise ve ifade false olarak deerlenirse,

    statement2 altrlr. if deyimini altrdktan sonra kontrol bir sonraki deyime geer.

    If deyiminin iki sonucundan herhangi biri (true veya false) altrma esnasnda birden fazla deyim sonucuyladnerse, oklu deyimler duruma gre onlar bloklar halinde altrr.

    Durumu snamak zerine altrlacak deyim(ler) asl if deyiminin iine gml baka bir if deyimini ierenherhangi bir eit olabilir. Gml if deyimlerinde else yantmleci ilikili elsei olmayan son if e aittir.rnein:

    if (x > 10)if (y > 20)

    Console.Write("Statement_1");else

    Console.Write("Statement_2");

    Bu rnekte, Statement_2 eer durum (y > 20) false dnerse grntlenecek.Bununla birlikte, eer Statement_2yi

    durum (x >10) ile ilikilendirmek isterseniz, keli parantezler kullannz:

    if (x > 10){

    if (y > 20)Console.Write("Statement_1");

    }elseConsole.Write("Statement_2");

    Bu durumda, Statement_2 eer durum (x > 10) false dnerse gsterilecek.

    else-if

    If deyiminin oklu durumlar idare edebilmesini salamak iin aadaki else-if dzenlemesini kullanmak

    mmkndr:

    if (Condition_1)Statement_1;

    else if (Condition_2)Statement_2;

    else if (Condition_3)Statement_3;

    ...else

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    20/41

    20

    Statement_n;

    Switch(Slayt 18)

    Switch deyimi kontrol gvdesiyle birlikte case deyimlerinden birine kaydrarak oklu seimleri idare eden birkontrol deyimidir.Aadaki ekliyle karmza kar:

    switch (expression)

    {case constant-expression:

    statementjump-statement

    [default: statementjump-statement]

    }

    Ne nerede:

    expression: Bir tamsay veya string tr ifadesi statement: Kontrol case veya varsaylana aktarldysa altrlacak olan gml deyim jump-statement: Kontrol case gvdesinin dna aktaran birjump deyimi. constant-expression: Kontrol bu ifadenin deerine gre tanml bir casee aktarlr.

    Kontrol, konstant deyimi deyime uyan durum bildirimine aktarlr. Switch deyimi herhangi bir sayda casedurumlar ierebilir, fakat ayn switch deyimi dahilindeki iki case sabiti ayn deere sahip olamaz. Deyimgvdesinin altrlmas seili deyimde balar ve jump deyimi kontrol case gvdesinden dar transfer edenedek srer.

    Jump deyimine her blok sonrasnda gerenksinim duyulduuna dikkat edin. Bu bloklara case deyimi veya birvarsaylan deyim olsa bile son blok dahildir. C switch deyiminin aksine, C# bir case etiketinden dierine akgeii desteklemez. Eer istenirse, goto a switch-case veya goto default kullanlabilir.

    Eer ifade herhangi bir sabit-ifade ile elemez ise, kontrol semeli varsaylan etiketi takip eden deyim(ler)eaktarlr. Eer varsaylan bir etiket yoksa kontrol switch dna aktarlr.

    static void SwitchSample(){Console.WriteLine("Coffee sizes: 1=Small 2=Medium 3=Large");Console.Write("Please enter your selection: ");string s = Console.ReadLine();int n = int.Parse(s);int cost = 0;switch(n){

    case 1:cost += 25;break;

    case 2:cost += 25;

    goto case 1;case 3:cost += 50;goto case 1;

    default:Console.WriteLine("Invalid selection. Please select 1, 2, or 3.");break;

    }if (cost != 0)

    Console.WriteLine("Please insert {0} cents.", cost);Console.WriteLine("Thank you for your business.");

    }

    nceki rnekte, switch case leri iin bir tamsay tr deikeni olan n kullanlmt. Ayrca dorudan string

    deikenini s kullanabiliyor olduunuza dabiliniz. Bu durumda, switch case lerini u ekilde kullanabilirsiniz:

    switch(s){

    case "1":

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    21/41

    21

    ...case "2":

    ...}

    Bir case etiketinden dierine gei desteklenmesede, case etiketlerini yn haline getirmek mmkndr. rnein:

    case 0:case 1:

    // do something;

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    22/41

    22

    Ders 4: Yineleme(Dng) Deyimleri (Slayt 20)

    Yineleme deyimlerini kullanarak dngler oluturabilirsiniz. Yineleme deyimleri dng-yok etme ltne balolarak gml deyimlerin birok kez altrlmasna sebebiyet verebilirler. Bu deyimler bir jump deyimininbelirmesi dnda srasyla altrlrlar.

    Aadaki anahtar kelimeler yineleme deyimlerinde kullanlrlar:

    do for foreach in while

    Bu derste C# yineleme deyimlerini reneceiz ve dier anahtar kelimeleri ortaya karacaz.

    While (Slayt 21)While deyimi belirtilen bir ifade false karl verene kadar bir deyimi veya deyimler blounu altrr.Aadaki ekliyle karmza kar:

    while (expression) statement

    Ne nerede:

    expression: True ve false operatrlerinin ar yklenmesiyle donatl bir bool veya bir tre rtl bir ekilde dntrlebilen ifade fade dg-yok etme ltn denemek iin kullanlr. statement: altrlacak gml deyim(ler)

    fadenin denemesi her dng altrmasndan nce grev alacandan, bir while dngs sfr veya daha fazla kezaltrlr.

    Bir while dngs; break, goto, return, veya throw deyimleri kontrol dng dna aktard zaman yok edilebilir.

    Kontrol dngden kmadan bir sonraki yinelemeye geirebilmek iin continue deyimini kullannz.

    static void WhileSample(){

    int n = 1;while (n < 6){

    Console.WriteLine("Current value of n is {0}", n);

    n++;}

    }

    Do (Slayt 22)

    do

    Do deyimi bir deyimi veya deyimler blounu belirtilen bir ifade false karln verene kadar tekrar ederekaltrr.

    Aadaki ekliyle karmza kar:do statement while (expression);

    Ne nerede:

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    23/41

    23

    expression: True ve false operatrlerinin ar yklenmesiyle donatlbir bool veya bir tre rtl bir ekildedntrlebilen ifade fade dg-yok etme ltn denemek iin kullanlr.

    statement: altrlacak gml deyim(ler)While deyiminin aksine, do deyiminin gvde dngs ifadenin deerine bakmakszn en az bir kere altrlr.

    static void DoSample(){

    int x;int y = 0;do{

    x = y++;Console.WriteLine(x);

    }while(y < 5);

    }

    do-while

    Bu rnekte durum false dnmesine ramen, dngnn bir kere altrldna dikkat ediniz.

    static void DoWhileSample()

    {int n = 10;do{

    Console.WriteLine("Current value of n is {0}", n);n++;

    } while (n < 6);}

    For (Slayt 23)

    For dngs, bir deyimi veya deyimler blounu belirtilen bir ifade false karln verene kadar tekrar ederekaltrr.Aadaki ekliyle karmza kar:

    for ([initializers]; [expression]; [iterators]) statement

    Ne nerede:

    initializers: Dng sayalarn tanmlama iin bir virgl ayral ifadeler listesi veya atama deyimleri. expression: True ve false operatrlerinin ar yklenmesiyle donatl bir bool veya bir tre rtl bir ekilde

    dntrlebilen ifade fade dg-yok etme ltn denemek iin kullanlr.

    iterators: Dng sayalarn arttrma veya azaltma iin kullanlan ifade deyim(ler)i. statement: altrlacak gml deyim(ler).

    For deyimi aadaki gibi deyimi tekrar ederek altrr:

    lk olarak, tanmlayclar deerlendirilir. Sonra , ifade true olarak deerlendirilirken, deyim(ler) altrlr ve yineleyiciler deerlendirilir. fade false olduunda, kontrol dng dna aktarlr.

    fadenin denemesi her dng altrmasndan nce grev alacandan, bir while dngs sfr veya daha fazla kezaltrlr.

    For deyiminin ifadelerinin tm semelidir; rnein, aadaki deyim sonsuz bir dng yazmak iin kullanlmtr:

    for (;;) { ... }

    static void ForSample(){for (int i = 0; i < 5; i++)

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    24/41

    24

    {Console.WriteLine(i);

    }}

    Foreach (Slayt 24)

    Foreach deyimi bir array veya bir nesne topluluu iersindeki her e iin bir grup gml deyimi tekrar eder.

    Foreach deyimi bu koleksiyon arasnda istenilen veriyi elde etmek iin yinelenir fakat tahmin edilemeyecek yanetkilerden saknmak adna koleksiyonieriini deitirmek iin kullanlmamaldr.Aadaki ekliyele karmza kar:

    foreach (deyimdeki tr tanmlayc) bildirimi

    Ne nerede:

    type: Tanmlaycnn tr identifier: Koleksiyon esini temsil eden yineleme deikeni. Yineleme deikeni deer trndeyse,

    etkin bir ekilde zerinde deiiklik yaplamayan bir salt okunur deikendir.

    expression: Nesne topluluu veya array ifadesi. Koleksiyon esinin tr tanmlayc trnedntrlebilir olmaldr.Bo olarak deerlendirilecek bir ifade kullanmaynz. IEnumerableuygulayan tr veya bir GetEnumerator yntemini ifade eden bir tr deerlendirir. kinci

    bahsedilen durumda, GetEnumerator, Ienumerator uygulayan bir trle geri dnmeli veya

    IEnumerator zerinde tanmlanan tm yntemleri ifade etmelidir.

    statement: altrlacak gml deyim(ler).Gml deyimler array veya koleksiyon ierisindeki her e iin almaya devam eder. Koleksiyondaki tm

    eler iin yineleme tamamlandktan sonra, kontrol foreach blounu takip eden bir sonraki deyime aktarlr.

    Arrayler ile foreach kullanm:

    static void ForeachArraySample()

    { int odd = 0, even = 0;int[] arr = new int[] { 0, 1, 2, 5, 7, 8, 11 };

    foreach (int i in arr){

    if (i % 2 == 0)even++;

    elseodd++;

    }

    Console.WriteLine("Found {0} Odd Numbers, and {1} Even Numbers.",odd, even);

    }

    Foreach, koleksiyonlar ile birlikte etkili bir ekilde kullanlr. Koleksiyonlar ve foreachin koleksiyonlar ile beraberkullanm hakknda daha fazlasn ilerleyen blmlerde reneceiz.

    Break ve Continue(Slayt 25)

    continue

    Continue deyimi kontrol, iinde belirdii yineleme deyiminin sonraki yinelemesine geirir.

    Bu rnekte, 1 den 10a kadar saymas iin bir saya tanmlanmtr. Continue deyiminin bir ifade (i < 9) ile birleimikullanlarak, continue ve for gvdesinin arasndaki deyimler atlanmtr.

    static void ContinueSample()

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    25/41

    25

    {for (int i = 1; i

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    26/41

    26

    Ders 5: Yntemler (Slayt 26)

    Bu blmde, C#ta yntemleri nasl kullanacanz reneceksiniz. Yntemler program kodunu oluturmadanemli mekanizmalardr. Yntemleri nasl oluturacanz ve tek bir snf arasndan veya snftan snfa naslaracanz reneceksiniz.

    Yerel deikenleri nasl kullanacanzn yan sra onlarnasl ayracanz veya yok edeceinizi de reneceksiniz.

    Ayrca bir yntemden nasl bir deer dn alacanz ve bir yntem ierisine veya dna parametrelerikullanarak nasl veri aktarm yapacanz da reniyor olacaksnz.

    Tanmlama ve arma (Slayt 27)

    Yntem bir grup C# deyiminin bir araya getirilip isim verilmesiyle oluan bir kavramdr. ou modernprogramlama dilleri benzer bir kapsama sahip olduundan, yntemi; bir ilev, bir altyordam, bir prosedr veya biralt program olarak dnebilirsiniz.

    Yntem rnekleri

    Slayt zerindeki kod yntemi iermekte:

    Main yntemi WriteLine yntemi ExampleMethod yntemi

    Main yntemi uygulamann giri noktasdr. WriteLine yntemi Microsoft .NET Frameworkn bir parasdr.

    Programnz dahilinde arlabilir.WriteLine yntemi System.Console snfnn duraan bir yntemidir.

    ExampleMethod yntemi ExampleClass a aittir. Bu yntem WriteLine yntemini arr.

    C#da, tm tntemler bir snfa aittir. Bu zellik; C, C++, ve Microsoft Visual Basic gibi kresel altyordam veilemlere izin veren programlama dillerinde bu ekilde deildir.

    Yntemleri Oluturmak

    Bir yntemi olutururken belirtilmesi gerekenler:

    o simYntemlere snf iersindeki bir deikene, bir sabite veya yntem olmayan herhangi bir eye verdiiniz gibiayn ismi veremezsiniz.Yntem ismi izin verilen herhangi bir C# tanmlaycs olabilir ve byk kk harfeduyarldr.

    o Parametre listesiYntem isminin ardndan yntem iin parametre listesi gelir. Bu bilgi parantezler ile evrelenir. Parantezler slaytrneinde de olduu gibi parametreler olmasa bile kullanlmaldr.

    o Yntemin gvdesiParantezlerin ardndan yntemin gvdesi gelir. Yntem gvdesini sadece bir tek deyiminiz olsa dahi keliparantezler ile ({ ve }) evrelemelisiniz.

    Yntemleri Tanmlamak iin Szdizimi

    Bir yntem oluturmak iin aadaki szdizimini kullannz:

    static void MethodName( ){

    method body

    }

    Aadaki rnek ExampleMethod in the ExampleClass snf ismindeki bir yntemin nasl oluturulacan

    gsteriyor:

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    27/41

    27

    using System;class ExampleClass{

    static void ExampleMethod( ){

    Console.WriteLine("Example method");}static void Main( ){

    Console.WriteLine("Main method");

    }}

    Bir yntemi tanmladktan sonra onu, ayn snf iersinden ve dier snflar ierisinden arabilirsiniz.

    arma Yntemleri

    Bir yntemi armak iin, parantezler ierisindeki parametre listesinden nce gelen yntemin ismini kullannz.Aadaki rnekte olduu gibi ardnz yntem parametrelere sahip olmasa bile parantezlerin kullanmgereklidir.

    MethodName( );

    Aadaki rnekte, program ExampleClassn Main ynteminin balangcnda almaya balyor. lk deyim The

    program is starting. grntsn veriyor. Main ierisindeki ikinci deyim ExampleMethoda olan ardr.

    Kontrol ak ExampleMethod ierisindeki ilk deyime geiyor, ve Hello, world belir iyor. Yntemin sonunda,kontrol yntem arsn takip eden ve The program is ending. grntsn veren deyime geiyor.

    using System;class ExampleClass{

    static void ExampleMethod( ){

    Console.WriteLine("Hello, world");}

    static void Main( ){Console.WriteLine("The program is starting");ExampleMethod( );Console.WriteLine("The program is ending");

    }}

    Yntemleri Dier Snflardan armak

    Bir snf ierisindeki yntemlerin dier snftaki yntemleri arabilmesi iin yapmanz gerekenler:

    armak istediiniz yntemi hangi snfn ierdiini belirlemekBunu yapmak iin aadaki szdizimini kullannz:

    ClassName.MethodName( ); Ortak anahtar kelime ile arlan yntemi ifade etmek

    Aadaki rnek A snfnda tanmlanan, B snfnda Mainden gelen TestMethod adl yntemin nasl arlacangsteriyor:

    using System;class A{

    public static void TestMethod( ){

    Console.WriteLine("This is TestMethod in class A");}

    }class B{

    static void Main( ){

    A.TestMethod( );

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    28/41

    28

    }}

    Yukarda gsterilen rnekte,eer,snf ismi kaldrlsayd, derleyici B snfndaki TestMEthod adndaki yntemibulmaya alacakt. Bu snfta bu isimde bir yntem olmadndan, derleyici u hatay grntleyecekti. Thename TestMethod does not exist in the class or namespace B.

    Bir yntemi ortak olarak ifade etmezseniz, snf iersinde varsaylan olarak zel konumuna geer. rnein, ortak

    (public) anahtar kelimesini TestMethodun tanmnda ihmal ederseniz, derleyici u hatay verecektir:

    A.TestMethod() is inaccessible due to its protection level.

    Ayrca yntemin sadece snf ierisinden arlabilmesini belirlemek iin zel anahtar kelime kullanabilirsiniz.Aadaki iki kod satr tam anlamyla ayn etkiye sahipler nk yntemler varsaylan olarak zel belirlenmitir:

    private static void MyMethod( );static void MyMethod( );

    Aada gsterilen public (ortak) ve private (zel) anahtar kelimeler yntemin eriilebilirliini belirlerler. Buanahtar kelimeler tanmland snfn ierisinden bir yntemin darya arlabilmesini kontrol ederler.

    Yntem arlarn ie Koymak

    Yntemleri yntemler ierisinden de arabilirsiniz. Aadaki rnek yntem arlarnn nasl iie konulduunugstermektedir:

    using System;class NestExample{

    static void Method1( ){

    Console.WriteLine("Method1");}static void Method2( ){

    Method1( );Console.WriteLine("Method2");Method1( );

    }static void Main( ){

    Method2( );Method1( );

    }}

    Bu programdan alnan kt aadaki gibidir:

    Method1Method2Method1Method1

    ie koyma yntemiyle snrsz sayda yntemi arabilirsiniz. ie koyma seviyesinde daha nceden tanmlherhangi bir snrlama yoktur. Bununla birlikte, genellikle alma-sresi ortam ilemi sergilemede kullanlan RAMmiktar yznden baz snrlamalar uygulayabilir. Her yntem ars dn adreslerini ve dier bilgilerini saklamakiin hafzaya ihtiya duyar.

    Genel bir kural olarak, iie konumu yntem arlar iin hafza sorunu yayorsanz, muhtemelen bir snftasarm sorunu yayorsunuzdur.

    Bir yntemin arana ani dn yapmasn salamak iin return deyimini kullanabilirsiniz. Return deyimi olmadanalma, kullancya genellikle yntem iindeki son deyime ulaldnda dner.

    Acil Geri Dn

    Varsaylan olarak, bir yntem kullancsna kod bloundaki son deyimin sonuna ulaldnda geri dner. Eer biryntemin arana acil geri dn yapmasn isterseniz return deyimini kullannz.

    Aadaki rnekte, yntem Hello, grntsn verecektir ve acilen arana geri dn yapacaktr:

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    29/41

    29

    static void ExampleMethod( ){

    Console.WriteLine("Hello");return;Console.WriteLine("World");

    }

    Return deyiminin bu ekilde kullanm ok kullanl deildir nk Console.WriteLine a yaplan son ar asla

    altrlmaz.

    Eer C# derleyicisinin uyar seviyesini 2 veya daha st seviyeye ayarladysanzi derleyici u mesaj verecektir:Unreachable code detected.

    Bir Koullu Deyim ile Geri Dn

    Bir return deyimini if veya switch gibi bir koullu deyimin bir paras olarak kullanmak daha genel ve ok dahafazla kullanl bir yntemdir. Bu, bir yntemin verilen bir koulla karlalrsa aranna geri dn yapmasnaizin verir.

    Aadaki rnekte, yntem eer numBeans deikeni 10 dan az ise geri dn yapacaktr; aksi taktirde, altrmabu yntem ierisinde devam edecektir.

    static void ExampleMethod( ){int numBeans;//...Console.WriteLine("Hello");if (numBeans < 10)return;Console.WriteLine("World");}

    Bir Deer ile Geri Dn

    Eer bir yntem void den ziyade bir veri tr ile tanmlanyorsa, geri dn mekanizmas ileme bir deer atamakiin kullanlr. Bunu daha sonra bu modl ierisinde tartyor olacaz.

    Yerel DeikenlerHer yntem kendisine ait yerel deikenler grubuna sahiptir. Bu deikenleri sadece ifade edildikleri yntemlerinierisinde kullanabilirsiniz. Yerel deikenlere uygulamann baka herhangi bir yerinden ulalamaz.

    Yerel deikenleri aadaki rnekte gsterildii gibi bir yntemin gvde ksmna dahil edebilirsiniz:

    static void MethodWithLocals( ){

    int x = 1; // Variable with initial valueulong y;string z;

    }

    Yerel deikenleri bir ilk deer olarak atayabilirsiniz. (rnein, nceki koddaki x deikenine baknz) Bir deeratamaz veya bir deeri belirlemek iin bir tanmlama ifadesi salamazsanz deiken tanmlanmayacaktr.Biryntem altnda ifade edilen deikenler ayn isimlere sahip olsalar bile dier yntemler altnda ifade edilendeikenlerden tamamen ayrdr.

    Yntem her arldnda yerel deikenler iin hafza tahsis edilir ve yntem yok edildiinde serbest braklr.

    Bu nedenle, bu deikenler ierisinde tutulan herhangi bir deer bir yntem arsndan dierine alkonmaz.

    Paylalan Deikenler

    Bir yntemin ka kere arldn saymaya kalkan aadaki kodu gz nne alnz:

    class CallCounter_Bad{static void Init( ){

    int nCount = 0;

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    30/41

    30

    }static void CountCalls( ){

    int nCount;++nCount;Console.WriteLine("Method called {0} time(s)", nCount);

    }static void Main( ){

    Init( );

    CountCalls( );CountCalls( );}

    }

    Bu program iki nemli sorundan dolay derlenemiyor. Init iersindeki nCount deikeni CountCalls ierisindeki

    nCount deikeniyle ayn deil. CountCalls yntemini ne kadar arrsanz arn, CountCalls her sona erdiinde

    nCount deeri kaybolur.

    Bu kodu yazmann kolay yolu aadaki rnekte olduu gibi bir snf deikeni kullanmaktr:

    class CallCounter_Good{

    static int nCount;static void Init( ){

    nCount = 0;}static void CountCalls( ){

    ++nCount;Console.Write("Method called " + nCount + " time(s).");

    }static void Main( ){

    Init( );CountCalls( );CountCalls( );

    }}

    Bu rnekte, nCount yntem seviyesinden ziyade snf seviyesinde ifade ediliyor. Bu nedenle, nCount snfierisindeki tm yntemler arasnda paylatrlyor.

    Kapsam akmalar

    C#da, ayn isme sahip olan yerel deikeni bir snf deikeni olarak ifade edebilirsiniz, fakat bu beklenmeyen bazsonular retebilir.Aadaki rnekte, NumItems hem ScopeDemo snf deikeni olarak hemde ayn zamanda Method1 ierisindekiyerel bir deiken olarak da ifade edilmi. ki deiken tamamyle farkl. Method1 iinde, numItems yereldeikenle iletiimde.

    Method2de, numItems snf deikeniyle iletiimde.class ScopeDemo{

    static int numItems = 0;static void Method1( ){

    int numItems = 42;}static void Method2( ){

    numItems = 61;}

    }

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    31/41

    31

    Geri Dn deerleri

    Bir yntemi acilen yok etmek iin return deyimini nasl kullandnz rendiniz.

    Ayrca return deyimini bir yntemden bir deerin geri dn iin de kullanabilirsiniz.

    Bir deer geri dn iin yapmanz gerekenler:

    1. Geri dnn yapmak istediiniz yntemi deer tryle birlikte ifade etmek.2. Yntem iine bir return deyimi eklemek.3. arana geri dnn istediiniz deeri dahil etmek

    Non-Void Tr ile Yntemleri fade Etmek

    arana geri dn yapabilmesi iin bir yntemi ifade ederken, void anahtar kelimesini geri dnn istediinizdeerin tryle deitirin.

    Geri Dn (return) Deyimleri eklemek

    Bir ifade ile gelen Return anahtar kelimesi yntemi hemen yok eder ve ifadeyi yntemin deeri olarak geridndrr. Aadaki rnek TwoPlusTwo arldnda Maine 4 deerini aracak olan TwoPlusTwo adl biryntemin nasl ifade edileceini gsteriyor:

    class ExampleReturningValue{

    static int TwoPlusTwo( ){

    int a,b;a = 2;b = 2;return a + b;

    }static void Main( ){

    int x;x = TwoPlusTwo( );Console.WriteLine(x);

    }}

    Geri dn yaplan deerin bir int olduuna dikkat ediniz. Bunun sebebi int in yntemin geri dn trolmasdr. Yntem arldnda, 4 deerinin geri dn yapld. Bu rnekte deer, Main ierisindeki x yereldeikeninde tutulur.

    Void olmayan Yntemler Deerleri Geri Dndrmelidir

    Eer non-void trde bir yntem ifade ediyorsanz, en az bir return deyimi eklemelisiniz. Derleyici her non-voidyntemin her durumda arma yntemine bir deer geri dn yapp yapmadn kontrol etmeye kalkacaktr.Eer derleyici bir non-void yntemin return deyiminin olmadn saptarsa, u hata mesajn ekrandagsterecektir: Not all code paths return a value. Bu hata mesajn ayrca derleyicinin bir deer geri dnolmakszn bir non-void uygulamasn altrma ihtimalini saptamas durumunda da grebilirsiniz.

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    32/41

    32

    Parametreler (Slayt 27)

    Parametreleri fade Etmek

    Her parametre bir tre ve bir isme sahiptir. Parametreleri yntem ismini takip eden parantezlerin ierisine

    yerletirerek ifade etmekteyiz.

    Parametreleri ifade etmek iin kullanlan szdizimi noktal virgl yerine virgl kullanmak zellii dnda yereldeikenleri ifade etmekte kullandmz szdizimlerine ok benzer.

    Aadaki rnek bir yntemin parametreler ile nasl ifade edildiini gstemektedir:

    static void MethodWithParameters(int n, string y){// ...

    }

    Bu rnek MethodWithParameters yntemini iki parametre ile ifade etmektedir: n ve y. lk parametre int trikincisi ise string trdr. Parametre listesindeki her parametrenin virgller ile ayrldna dikkat ediniz.

    Parametreler ile Yntem arma

    Yntem arld zaman arma kodu parametre deerlerini salamaldr. Aadaki kod parametreler ile biryntem armaya iki rnek vermektedir. Her iki durumda da, MethodWithParameters altrmas balangcndaparametrelerin deerleri bulunuyor ve n ve y parametreleri ierisine yerletiriliyor.

    MethodWithParameters(2, "Hello, world");int p = 7;string s = "Test message";

    MethodWithParameters(p, s);

    Parametrelerin geii farkl yolla gerekletirilebilir:

    Deer ileDeer parametreleri bazen in parameters olarak adlandrlrlar nk verinin yntemin iine geiisalanabilirken k salanamamaktadr.

    Referans ileReferans parametreleri bazen in/out parametersolarak adlandrlrlar nk verinin yntem iine ve dna geiisalanabilir.

    kt ilekt parametreleri bazen out parameters olarak adlandrlrlar nk verinin yntem dna k salanabilirkengirii salanamamaktadr.

    Referans Geii(Slayt 28)

    Referans Parametreleri Nelerdir?

    Bir referans parametresi bir bellek yerine olan referanstr. Bir deer parametresinin aksine, bir referansparametresi yeni bir bellek yeri oluturmaz. Bunun yerine, bir referans parametresi yntem ars ierisindetedarik edilen deiken olarak bellekteki ayn yeri temsil eder.

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    33/41

    33

    Referans Parametrelerini fade Etmek

    Bir referans parametresini ref anahtar kelimesini rnekteki gibi tr isminden hemen nce kullanarak ifade

    edebilirsiniz:static void ShowReference(ref int nId, ref long nCount){// ...}

    oklu Parametre Trlerinin Kullanm

    Refanahtar kelimesi tm parametre listesine deil sadece ardndan gelen parametreye uygulanr. nId in

    referansla fakat longVar n deer ile geiininyapld aadaki yntemi gzden geirin:

    static void OneRefOneVal(ref int nId, long longVar){// ...

    }

    Referans Parametre Deerlerinin Deitirilmesi

    Eer bir referans parametresinin deerini deitirirseniz, aran tarafndan sunulan deiken de deiecektir,nk her ikiside bellek zerindeki ayn yere referanstrlar. Aadaki rnek referans parametresini deitirmeninayn zamanda deikeni de deitirdiini gstermektedir:

    static void AddOne(ref int x){x++;}static void Main( ){

    int k = 6;AddOne(ref k);Console.WriteLine(k); // Display the value 7}

    Bu alr nk AddOne arldnda, kendi parametresi olan x, Main iersindeki k deikeni ile ayn bellekyerine bakmaya ayarlanmtr. Bu nedenle,x deerini ykseltmek k deerini de ykseltecektir.

    Parametre Arrayleri (Slayt 29)

    Deiken-uzunluktaki Parametreleri fade Etmek

    Bazen deiken saylardaki parametreleri kabul eden bir ynteme sahip olmak kullanldr.C#da, bir deiken-uzunluktaki parametre listesi belirtmek iin params anahtar kelimesini kullanabilirsiniz. Bir deiken-uzunluktakiparametreyi ifade ederken yapmanz gerekenler:

    Herbir yntem iin sadece bir params ifade etmek. Parametreyi parametre listesinin sonuna yerletirmek. Parametreyi tek ynl bir array tr olarak ifade etmek.

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    34/41

    34

    Aadaki rnek bir deiken-uzunluktaki parametre listesinin nasl ifade edildiini gstermektedir:

    static long AddList(params long[ ] v)

    {long total;long i;

    for (i = 0, total = 0; i < v. Length; i++)total += v[i];return total;}

    Bir params parametresi her zaman bir array olduundan, tm deerler ayn tr olmaldr.

    Deerlerin Geii

    Bir yntemi deiken-uzunluktaki bir parametre ile ardnzda, deerlerin params parametresine geiini u ikiyoldan biri ile gerekletirebilirsiniz:

    Bir virgl ayral e listesi olarak (liste bo olabilir) Bir array olarak

    Aadaki kod her iki teknii de gstermektedir. Her iki teknik de derleyici tarafndan ayn ynteme maruzkalmaktadr.

    static void Main( ){long x;x = AddList(63, 21, 84); // Listx = AddList(new long[ ]{ 63, 21, 84 }); // Array}

    Yntemi armada hangi yntemi kullandnza bakmakszn, params parametresi bir array gibi muamele grr.

    Her bir arya ka parametrenin gei yaptn saptayabilmek iin arrayin Length zelliini kullanabilirsiniz. Bir

    params

    parametresinde, verinin bir kopyas oluturulur, ve yntem ierisinde deerleri deitirebilmenize ramenyntem dndaki deerler deimez.

    YntemAr Ykleme (Slayt 30)

    Fazla ykleme yntemleri tek bir snf ierisinde ayn isme sahip olan yntemlerdir. C# derleyicisi fazla yklemeyntemlerini parametre listelerini karlatrarak ayrt eder.

    Fazla Ykleme Yntemlerine rnekler

    Aadaki kod bir snf ierisinde ayn isimle farkl yntemleri nasl kullanabileceinizi gstermektedir:

    class OverloadingExample{

    static int Add(int a, int b){

    return a + b;}static int Add(int a, int b, int c){

    return a + b + c;}static void Main( ){

    Console.WriteLine(Add(1,2) + Add(1,2,3));

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    35/41

    35

    }}

    C# derleyicisi snf ierisinde Add(Ekle) adnda iki yntem, ve Main ierisinde yine Add adndaiki yntem arsbulur.Yntem isimleri ayn olmasna ramen, derleyici parametre listelerini kullanarak iki Add yntemini ayrtedebilir.

    lk Add yntemi, her ikisinin tr int olan iki parametreyi ele almaktadr. kinci Add yntemi, yine int trnde olan parametreyi ele almaktadr. Parametre listeleri farkl olduundan, derleyici her iki ynteminde ayn snftarafndan tanmlanmasna izin verir.

    Main ierisindeki ilk deyim iki int parametresi ile Add zerine bir ar ierir, bylece derleyici bunu ilk Addyntemine olan bir ar olarak evirir. Adde yaplan ikinci ar int parametresi kullanr, bylece derleyicibunu ikinci Add yntemine olan bir ar olarak evirir.

    Ayn snf ierisinde yntemler ve deikenler,sabitler veya saym trleri arasnda isim paylam yapamazsnz.

    Aadaki kod derlenmeyecek nk k ismi hem bir yntem hem de bir snf deikeni iin kullanlm:

    class BadMethodNames{

    static int k;static void k( ){

    // ...}

    }

    mza Tanm

    C# derleyicisi imzalar bir snf ierisindeki yntemleri ayrt etmede kullanr. Her bir snfta, her yntemin imzas busnfta ifade edilen dier tm yntemlerin imzasndan farkl olmaldr.

    Bir yntemin imzas; yntemin isminden, yntemin ele ald parametre saysndan ve her parametrenin tr ve

    deitiricisinden (out veya ref gibi) oluur.

    Aadaki rnek farkl imzalara sahipler bylelikle ayn snf ierisinde ifade edilebilirler.

    static int LastErrorCode( ){}static int LastErrorCode(int n){

    }static int LastErrorCode(int n, int p){}

    mzaya Etki Etmeyen eler

    Yntem imzas return trn iermez. Aadaki iki yntem de ayn imzalara sahip, bu sayede ayn snf ierisindeifade edilemezler.

    static int LastErrorCode(int n){}

    static string LastErrorCode(int n){

    }

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    36/41

    36

    Yntem imzas parametrelerin isimlerini iermez. Aadaki iki yntem ayn imzaya sahip olsalarda parametre

    isimleri deiik.

    static int LastErrorCode(int n){}static int LastErrorCode(int x){}

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    37/41

    37

    Ders 6: stisna daresi (Slayt 31)

    C# dilinin istisna idaresi zellii bir program alrken ortaya kabilecek herhangi bir beklenmeyen veya istisnaibir durumun stesinden gelmek adna bizlere bir yol sunar. stisna idaresi hatalar idare etmede, kaynaklartemizlemede try, catch, ve finally anahtar kelimelerini kullanr. stisnalar common language runtime (CLR)tarafndan, nc-parti ktphaneler veya throw anahtar kelimesini kullanan uygulama kodlar tarafndan

    retilebilir.

    Bu derste C# istisna idaresi zelliini ve kendi bamza istisna oluturma ve yok etme konularn reneceiz.

    Try-catch (Slayt 32)

    Bir try bloku C# programclar tarafndan bir istisnadan etkilenebilecek kodu blmlemede kullanlr ve catchbloklar herhangi bir sonulanan istisnay idare eder. Finally blou bir istisnann ortaya kmasna bakmakszn (kibu baz durumlarda gereklidir) kodun altrlmasnda kullanlr. Bir try blou, bir catch veya bir finally blou ilebirlikte almaldr ve oklu catch bloklarnda ierebilir. rnein:

    try{

    // Code to try here.}catch (System.Exception ex){

    // Code to handle exception here.}

    Bir try deyimi, catch veya bir finally blou olmadan derleme hatas ile sonulanacaktr.

    Bir catch blou yakalamak zere bir istisna trn belirleyebilir. Bu tr bir istisna filtresi (exception filter) olarakadlandrlr ve Exception veya Exceptiondan tretilen baka bir trden olmaldr.

    oklu catch bloklar

    Farkl istisna filtreleri ile olan oklu catch bloklar kendi ilerinde zincirlenebilir. oklu catch bloklar en stten enalta doru deerlendirilir fakat her istisna oluumu iin sadece bircatch blou altrlr.Atlan deyime ait birtaban snf ya da kesin tr belirten ilk catch blou yrtlecektir.Eer hibir catch blou uygun bir istisna filtresibelirleyemezse, filtresiz (eer varsa) bir catch blou altrlacaktr. Catch bloklarn ilk olarak en belirli, en oktretilen istisna snflar ile yerletirmek nemlidir.

    static void TestCatch2(){

    try{

    TestThrow();

    }catch (System.ApplicationException ex){

    System.Console.WriteLine(ex.ToString()); // this block will be executed}catch (System.Exception ex){

    System.Console.WriteLine(ex.ToString()); // this block will NOT beexecuted

    }

    System.Console.WriteLine("Done");// this statement is executed after the catch block}

    stisnalar u durumlarda catch etmelisiniz:

    stisnann neden oluturulduu belli bir ekilde bildiiniz durumlarda ve bir FileNotFoundException nesnesiyakalamak ve kullancya yeni bir dosya ismi girmesini bildirmek gibi belirli bir kurtarma hareketini

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    38/41

    38

    uyguladnzda.

    Yeni veya daha belirli bir istisna oluturmak veya kullanmak istediinizde. Bir istisnay ksmen idare ederken. rnein, bir catch blou bir hata kaydna yeni bir giri eklemede kullanlabilir.

    Fakat sonrasnda istisnann sonraki idaresine izin vermek iin istisnasy yeniden kullanr.

    Finally (Slayt 33)

    Bir finally blou bir try blou ierisindeki gerekletirilen hareketlerin temizlenmesine izin verir. Eer varsa, finallyblou try ve catch bloklarndan sonra altrlr. Bir finally blou bir istisnann olutuuna veya bir catchbloununbulunan istisna trne uyup uymadna bakmakszn her zaman altrlr.

    Finally blou alma sresi iersindeki gereksiz veri toplaycsnn nesneyi bitirmesini beklemeksizin dosya akm,veri taban balantlar ve grafik idaresi gibi kaynaklar serbest brakmada kullanlabilir.

    Finally blou try-catch-finally veya try-finally kombinasyonlar eklinde kullanlabilir:

    try{

    // Code to try here.}

    finally{

    // Code to execute after try here.}

    veya u ekilde:

    try{

    // Code to try here.}catch (System.Exception ex){

    // Catches a generic exception

    }finally{

    // Code to execute after try (and possibly catch) here.}

    Ne Zaman KullanlrAada ki rnek kod, almas esnasnda bir ka istisnai durum oluturabilir.

    static void Main(string[] args){

    int i, j, k;

    try{

    i = int.Parse(Console.ReadLine());j = int.Parse(Console.ReadLine());

    k = i / j;

    Console.WriteLine(k);}catch (Exception ex){

    Console.WriteLine(ex.Message);}finally{

    Console.Beep();}

    }

    finally blounu ne olursa olsun, altrlaca iin, bu kod aadaki ile ayndr.

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    39/41

    39

    try{

    i = int.Parse(Console.ReadLine());j = int.Parse(Console.ReadLine());

    k = i / j;

    Console.WriteLine(k);}catch (Exception ex)

    { Console.WriteLine(ex.Message);}finally{

    }Console.Beep();

    Bu rnee gre finally, try-catch bloundan hemen sonra gelecek bir kod satrnda herhangi bir avantaja sahipolmayacaktr. Finallynin avantaj sadece bir try veya daha ok bir catch blounun iersindeki bir ileminaltrmas beklenmedik ekilde sonlanrsa belirecektir. altrma bir retun anahtar kelimesiyle engellenebilir.

    try

    {i = int.Parse(Console.ReadLine());j = int.Parse(Console.ReadLine());

    k = i / j;

    Console.WriteLine(k);}catch (Exception ex){

    Console.WriteLine(ex.Message);return;

    }finally

    {

    }Console.Beep();

    Bu artlar altnda, uygulama eer bir istisnai durum oluturursa tmeyecek.

    try{

    i = int.Parse(Console.ReadLine());j = int.Parse(Console.ReadLine());

    k = i / j;

    Console.WriteLine(k);

    }catch (Exception ex){

    Console.WriteLine(ex.Message);return;

    }finally{

    Console.Beep();}

    Exception (istisna) snf(Slayt 34)

    Exception snf uygulama altrmas esnasnda beliren hatalar temsil eder. Bu snf tm istisnalar iin temelsnftr. Bir hata belirdiinde, sistem veya mevcut alan uygulama, hata hakknda bilgi ieren bir istisna ortayakararak rapor verir. Ortaya karldktan sonra bir istisna uygulama veya varsaylan istisna idarecisi tarafndan

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    40/41

    40

    idare edilir.

    Exception (istisna) Tr zellikleri

    Exception (istisna) tr aadaki zellikleri destekler:

    Hatay aklayan insan tarafndan okunabilir metin olmas. Biristisna belirdiinde alma sresinin oluturduubir metin mesaj kullancy hatann yaps ve zm iin yaplacak hareketler konusunda nerilerle uyarr. Bu

    metin mesaj istisna nesnesinin Message zelliklerinde tutulur. stisna nesnesinin oluturulmas sresince bu zelistisnann detaylarn anlatan bir metin stringini yapcya gnderebilirsiniz. Yapc tarafndan herhangi bir hata

    argman sunulmazsa, varsaylan hata mesaj kullanlacaktr.

    stisna ortaya karld an ki ar ynn durumu. StackTrace zellii hatann kodun neresinde belirdiine dair biryn izi tar. Yn izi tm arlan yntemleri ve arlarn yapld kaynak dosyasndaki satr numaralrn listeler.

    Exception (istisna) Tr Kategorileri

    Temel Exception snf altnda iki istisna kategorisi vardr:

    nceden tanml SystemExceptiondan tretilmi genel dil alma srsi istisna snflar. Kullanc tanml ApplicationException dan tretilmi uygulama istisna snflar.

    Performans nerileri

    Sistem kaynaklarnn ve altrma zamanlarnn nemli bir blm bir istisnay ortaya karma veya idare etmedurumlarnda kullanlr. Throw istisnalar tahmin edilebilir olaylar veya akmlar kontrol etmektense sadeceallmadk durumlar idare etmede kullanlrlar.rnein, uygulamanz eer bir yntem argman geersiz ise beklenildii zere bir istisna ortaya karabilir nksiz ynteminizi geerli parametrelerle armay beklersiniz. Geersiz bir yntem argman allmadk bazdurumlarn ortaya kt anlamna gelir. Aksine, eer bir kullanc girdisi geersiz ise herhangi bir istisnauygulamayn nk kullanclardan bu tarz geersiz veri girdileri ara sra beklenebilir.Bu tarz bir durumda,kullanclara yeniden deneme mekanizmas sunun ve kullanclar geerli verilerini girebilsinler.

    zel bir istisna iin geerli bir ileyici deil, uygulamann byk bir blm iin geerli, genel hedefli bir istisna

    ileyicisi dahilinde sadece sra d koullar iin istisnalar atn ve ardndan istisnalar yakalayn. Bu yaklamn

    altnda yatan mantk, ou hatann hataya yakn konumda yrtlecek dorulama ve hata giderme yoluyla

    ynetilebiliyor olmasdr; hibir istisnann atlmas ya da yakalanmas gerekli deildir. Genel amal istisna

    ileyicisi, uygulama dahilinde herhangi bir konuma atlm beklenmedik istisnalar yakalar.

    Ek olarak, bir geri dn kodu yeterli iken bir istisna uygulamayn; bir geri dn kodunu bir istisnayadntrmeyin; ve rutin bir ekilde bir istisnay catch etmeyin, sadece grmezlikten gelip ileme devam edin.

    Throw (Slayt 35)

    Throw deyimi program altmas sresince beliren aykr durumlar (istisna) iaretlemede kullanlr. Uygulananistisna snf System.Exception dan tretilen bir nesnedir, rnein:

    class MyException : System.Exception {}// ...throw new MyException();

    Genellikle throw deyimi try-catch veya try-finally deyimleriyle birlikte kullanlr. Bir istisna uygulandnda,program bu istisnay idare eden catch deyimini arar. Yakalanan bir istisnay throw deyimini kullanarak yenidenuygulayabilirsiniz.

    Bu rnek throe deyimi kullanarak nasl bir istisna uygulanacan gstermektedir:

    // throw example

  • 8/14/2019 Visual C# Turkish by Muhammed medeni Baykal

    41/41

    using System;public class ThrowTest{

    static void Main(){

    string s = null;

    if (s == null){

    throw new ArgumentNullException();

    }Console.Write("The string s is null"); // not executed

    }}

    Blm Tekrar Bak(Slayt36)

    Bu blm ok uzun ve bilgi verici bir blm oldu. C#n tm nemli ve temel zelliklerini rendiniz.Bu balklarla ilgili daha fazlasn Microsoft Developers Network (MSDN) web sitelerinden bulabilirsiniz.