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.aspx8/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.aspx8/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.