C# Akademi 2005

1,488 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,488
On SlideShare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
39
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

C# Akademi 2005

  1. 1. .NET Framework ve C#’a Giriş C# Akademi (http://www.csharpnedir.com) 1
  2. 2. Tarihçe C Dili ve Yapısal Programlama C++ ve Nesne Yönelimli Programlama Java’nın Doğuşu İnternetin Gelişimi ..ve C#’ın doğuşu (http://www.csharpnedir.com) 2
  3. 3. Neden C# Öğrenilmesi kolay Nesne yönelime tam destek Yüksek verim Güç ve kolaylık arasındaki denge XML desteği Yönetilemeyen kod yazma desteği Olay tabanlı programlamaya tam destek C# modern bir dil. SONUÇ : C# güzel bir dildir  (http://www.csharpnedir.com) 3
  4. 4. Neler yapabiliriz ? Konsol Uygulamaları Windows form tabanlı uygulamalar ASP.NET ile Web formları Web servisleri Mobil uygulamalar Windows servisleri DLL(!) geliştirme (http://www.csharpnedir.com) 4
  5. 5. .NET ne işe yarar ? Web site Arkaplan Uyg. Mega Servis Web site Arkaplan Uyg. Web site Mega Servis (http://www.csharpnedir.com) 5
  6. 6. Eski zorluklar neler ? Bir çok geliştirme ortamı var (COM,MFC,ATL,VB,VC++) COM’un zorlukları DLL Cehennemi Kurulum zorlukları.Register zorunluluğu (http://www.csharpnedir.com) 6
  7. 7. .NET in tasarım amacı DLL cehenneminden kurtuluş. Kolay kurulum - XCOPY COM Modelinin tasarım zorluğunu aşma Daha hızlı ve kolay geliştirme modeli XML ve SOAP ile web servislerine kolay erişim desteği Interneti daha iyi programlama ve cihazdan bağımsız geliştirme yapabilme beceresi Platform ve dil bağımsızlığı (http://www.csharpnedir.com) 7
  8. 8. .NET Framework Bileşenleriİki ana bileşen FCL – Framework Class Library CLR – Common Language Runtime (http://www.csharpnedir.com) 8
  9. 9. .NET Framework VB C++ C# JScript … CLS Standartları Visual Studio.NET Visual Studio.NET ASP.NET: Web Servisi Windows Windows ve Web Formları Formları Forms ADO.NET: Data ve XML Temel Sınıf Kütüphanesi CLR - Common Language Runtime (http://www.csharpnedir.com) 9
  10. 10. CLR : Çalışma ModeliKaynak VB C# C++kod Yönetilmeyen Derleyici Derleyici Derleyici BileşenlerAra Assembly Assembly Assembly IL Kodu IL Kodu IL Kodukod CLR - Common Language Runtime JIT Derleyicis Doğal(Native) Kod İşletim Sistemi Servisleri (http://www.csharpnedir.com) 10
  11. 11. Özetle .NET Derleme Modeli kod.cs csc.exe IL(aradil) İlk derlemeden sonraki derlemeler ön bellekten okunacağı için hız artacaktır. KOD X86 MakineUygulama CLR JIT Kodu METADATA (http://www.csharpnedir.com) 11
  12. 12. .NET Framework kütüphanesi Unified Classes Web Classes (ASP.NET) Controls, Caching, Security, Session, Configuration etc Data (ADO.NET) Windows Forms ADO, SQL,Types etc Design, Cmpnt Model etc Kaynak : MSDN XML Classes Drawing Classes XSLT, Path, Serialization etc Drawing, Imaging, Text, etc System Classes Collections, Diagnostics, Globalization, IO, Security, Threading Serialization, Reflection, Messaging etc NYP tasarım modeli ve hiyerarşik yapıdaki kütüphane (http://www.csharpnedir.com) 12
  13. 13. Bazı kütüphanelerNamespace(isim alanları) System System.Collections System.IO System.Windows.Forms System.Net System.Threading System.Xml System.Data System.Reflection ... ... (http://www.csharpnedir.com) 13
  14. 14. CLR – Common Language Runtime JIT derleyicileri ile anında derleme Hafıza(memory) ve kanal(thread )yönetimi IL’e derleme ve çalıştırma Çoklu CPU desteği için optimizasyonlar ILDasm.exe – Önemli bir araç Managed Code (CLR nin çalıştırdığı kod) Ngen.exe utility (Doğal koda dönüştürme aracı – Intel 8086-) (http://www.csharpnedir.com) 14
  15. 15. Yönetilen Kodda neler var? EXE kodu PE formatındadır *Portable Executable Yönetilen EXE de bulunanlar: 1. PE Başlığı 2. CLR Başlığı 3. Metadata  Projedeki bütün türler  Tür güvenliği garantisi  Referans sayımı.(GC) 4. IL Kodu MSCOREE.dll sistem DLL inde bulunan _CorExeMain fonksiyonu ile IL kodu çalıştırılır (http://www.csharpnedir.com) 15
  16. 16. Çöp toplama – Garbage Collection Siz hiçbir zaman çöp toplamaya layık biri değilsiniz? .NET arkanızda bıraktığınız çöpleri sizin yerinize toplar! (http://www.csharpnedir.com) 16
  17. 17. CTS – Common Type System Sınıflar ve Yapılar. Veri türlerindeki elemanlar  Field(Alan)  Metod  Property(Özellik)  Event(Olay) Bütün türlerin atası: System.Object (http://www.csharpnedir.com) 17
  18. 18. C# tipi Boyut .NET tipi AralıkTürler byte (byte) 1 Byte 0-255 Referans ve değer türleri char 2 Char Unicode char Reference türleri heap’te saklanır bool 1 Boolean True/false Değer tipleri stack’te saklanır sbyte 1 Sbyte -128/127 Bütün türler System.Objects’ten türetilmiştir short 2 Int16 -32K/+32K İki veri türü arasında dönüşüm ushort 2 Uint16 0-65K yapabilir. Burak bey anlatacak. int 4 Int32 -2B/+2B uint 4 Uint32 0-4B GC ile referans sayımı yapılır. float 4 Single IEEE float double 8 Double IEEE double decimal 12 Decimal 28 digits fixed precision long 8 Int64 +-9e16 ulong 8 UInt64 0-1.8e17 (http://www.csharpnedir.com) 18
  19. 19. CLS - Common Language SpecificationOrtak Dil Standartları CLR/CTS’nin altkümesi  Sınırlı sayıda tür.  Sınırlı özellikler  Diller arası uyumluluk VB.NET, C#.NET, J#.NET, Perl,Delphi,Cobol,Eiffel vs.  Diller arası uyumluluk istenmiyorsa CLS standartları ihmal edilebilir. (http://www.csharpnedir.com) 19
  20. 20. CLI - Common Language Infrastructure  CLI - ECMA – 335  http://www.ecma- international.org/publications/standa rds/Ecma-335.htm  Mono projesi (Linux)  www.go-mono.com  DotGNU Projesi (FreeBSD,Solaris,Mac OS)  www.dotgnu.org (http://www.csharpnedir.com) 20
  21. 21. Assembly Nedir? “Bir Assembly bir yada daha fazla veri türü tanımını ve kaynakları içeren .NET dosyasıdır.” – Richter Her assembly manifest içerir. Manifest şunları içerir :  Assembly’de ki dosyaların isimleri  Assembly versiyonu  Dil seçeneği-Culture  Türler  Geliştirici-YayıncıApplication Domain Kavramı (http://www.csharpnedir.com) 21
  22. 22. Assembly Nedir? CLR Assembly’ler üzerinde çalışır. Manifest’e bakarak yüklemeyi yapar, ardından alt dosyaları yükler. .GIF ve .JPG gibi kaynakları içerebilir. Assembly EXE yada DLL olabilir.  “Assembly : Mantıksal EXE veya DLL” (http://www.csharpnedir.com) 22
  23. 23. Assembly Yükleme Strongly Named Assemblies (Public Assembly) (GAC Kurulumu) Private Assemblies (XCOPY Kurulum) Tek farkı kurulumla ilgilidir. (http://www.csharpnedir.com) 23
  24. 24. Public Assembly Global düzeyde kullanıma hazır Tekil özellikleri:  Dosya Adı  Versiyon numarası  Culture ID  Public Tekil ID Tekil ID ile imzalanmalıdır  Use: SN –k keyfile.keys  Keyfile.snk dosyası örneği. İmzalandıktan sonra : GAC’a (Global Assembly Cache) atılabilir  GAC’ın adresi genellikle : c:windowsAssemblyGAC Bu işlem gacutil.exe ile yapılabilir. Yada GAC dizinine kopyalama ile (http://www.csharpnedir.com) 24
  25. 25. Private Assemblies Tekil ID yok Uygulama dizininde bulunur XCOPY kurulumu yapılabilir. Uygulama ile taşınmalıdır. (http://www.csharpnedir.com) 25
  26. 26. Visual Studio.NET’in getirileri Pratik geliştirme sağlar. .NET ortamında geliştirme yapmak için zorunlu değildir. C# ve VB için çok benzer ortamlar GUI tasarımı ve gelişmiş hata ayıklama(debugging) ASP.NET,Web ve Windows servisleri kolayca oluşturulur. Kolay veritabanı erişim teknikleri Global yada lokal XML dosyalarını oluşturma ve düzenleme (http://www.csharpnedir.com) 26
  27. 27. C# Komut Satırı Derleyicisi – csc.exe VS.NET’e ihtiyaç duymadan her türlü uygulamayı geliştirmemiz mümkündür. Hata ayıklama desteği csc /t:winexe /debug kaynak.cs Hata Ayıklama(Debug) Örneği (http://www.csharpnedir.com) 27
  28. 28. Bazı önemli .NET araçları Ngen.exe İldasm.exe Adepends.exe Cordbg.exe Gacutil.exe Sn.exe Regsvc.exe TlbImp.exe TlbExp.exe ... (http://www.csharpnedir.com) 28
  29. 29. Merhaba DünyaClass ilk_program1{ static void Main() { System.Console.WriteLine(“Merhaba Dünya”); }} (http://www.csharpnedir.com) 29
  30. 30. Merhaba Dünya C# ile yazılan kaynak dosyaların uzantıları cs dir. Kaynak kodu komut satırından derlemek için, csc.exe programı kullanılır. csc ilk_program1.cs (http://www.csharpnedir.com) 30
  31. 31. Merhaba DünyaBir C# programının en temel özellikleri C# %100 nesne yönelimlidir. Herşey bir sınıf nesnesidir. Main() işlevi bir programın çalışmaya başladığı noktadır. static void Main() Kaynak kodlar mutlaka bir sınıf bildirimi içinde yapılır. Class ilk_program1 { ... } Bütün C# programları en az bir sınıf bildirimi içermelidir. (http://www.csharpnedir.com) 31
  32. 32. Merhaba DünyaBir C# programının en temel özellikleri Tüm kod satırları ; ile biter. System.Console.WriteLine(“Merhaba Dünya”); Sınıflar ve işlevler küme parantezleri içine yazılır. { } İş yapan elemanlara metod denilir. NET sınıf kütüphanesi binlerce metod içerir. (http://www.csharpnedir.com) 32
  33. 33. Merhaba Dünyausing System ; using anahtar sözcüğü ile uygulamlarımıza isim alanlarını ve alt isim alanlarını ekleyebilir ve böylece ; System.Console.WriteLine(“ Merhaba Dünya “ ); ifadesi yerine, bu ifadeyi dahada kısaltarak aşağıdaki formu kullanabiliriz. Console.WriteLine(“ Merhaba Dünya “ ); (http://www.csharpnedir.com) 33
  34. 34. Temel Veri Türleri Temel Veri Türleri Önceden Kullanıcı Tanımlanmış Tanımlı Veri Türleri Veri Türleri Değer Tipi Referans Tipi (http://www.csharpnedir.com) 34
  35. 35. Değişken Nedir? Değişkenler içlerinde farklı türlerde veri saklayabildiğimiz bellek alanlarının programlamadaki karşılığıdır. (http://www.csharpnedir.com) 35
  36. 36. Bellek Alanları Stack Heap Register Static Constant Ram Olmayan Bölge (http://www.csharpnedir.com) 36
  37. 37. Bellek AlanlarıStack; RAM’de yer alır. Değer Tiplerinin tutulduğu yer. Stack’ta tutulacak verilerin çalışma zamanı öncesinde ne kadar yer kaplayacağının bilinmesi gerekir. (http://www.csharpnedir.com) 37
  38. 38. Bellek AlanlarıHeap; RAM’de yer alır. Referans türlerinin tutulduğu yer. Bütün C# nesneleri bu bölgede tutulur. Tutulacak nesnenin derleyeci tarafından bilinmesi zorunlu değildir. Tutulacak veriler çalışma zamanında dinamik olarak yaratılır. İşlem hızı stack’a göre daha yavaştır. Heap’te tutulacak bir nesne oluşturmak için new anahtar kelimesini kullanırız. (http://www.csharpnedir.com) 38
  39. 39. Bellek AlanlarıRegister; İkincil Önbellek’te yer alır. Sadece derleyici erişir. Programcının doğrudan erişme hakkı yoktur. Stack ve Heap’e göre çalışma mekanizması çok daha hızlıdır. (http://www.csharpnedir.com) 39
  40. 40. Bellek AlanlarıStatic; Bellekteki herhangibir sabit bölge. Veri, programın çalışması boyunca saklanır. Static veriler için static anahtar sözcüğü kullanılır. (http://www.csharpnedir.com) 40
  41. 41. Bellek AlanlarıConstant; Değişmesi istenmeyen veriler için kullanılır. Yanlız okunabilir amaçlı olduklarından bazen ROM’da tutulurlar. (http://www.csharpnedir.com) 41
  42. 42. Bellek AlanlarıRAM Olmayan Bölge; Disk alanları. Kalıcı olması istenen veri türleri için kullanılır. Örneğin veritabanlarının tutulduğu disk bölgeleri. (http://www.csharpnedir.com) 42
  43. 43. Değişken Tanımlama Programın çalışması süresince kullanacağımız verileri depolamak için değişkenleri kullanırız.  Değişkenleri, ilk değer ataması yapmadan kullanmak yasaktır.  Değişken tanımlamaları kaynak kodun herhangibir yerinde olabilir.  Virgül kullanarak bir satırda birden fazla değişken aynı türden olmak koşuluyla tanımlanabilir. double a,b,c; (http://www.csharpnedir.com) 43
  44. 44. Değişken İsimlendirme Değişken isimleri büyük küçük harf duyarlıdır. int Ucret; int UCRET; Değişken isimleri nümerik karakterler ile başlayamaz. İnt 1Ucret; Değişken isimlerinde boşluk karakteri kullanılamaz. int ucret Artisi; (http://www.csharpnedir.com) 44
  45. 45. Değişken Faaliyet Alanları Bir sınıfın üye alanı olarak tanımlanmış değişken her zaman sınıfın faaliyet alanı içindedir. Yerel bir değişken tanımlandığı blok arasında kaldığı sürece faaliyet alanındadır. For döngüleri gibi döngü bloklarında tanımlanan değişkenler döngünün dışında geçersizdir. (http://www.csharpnedir.com) 45
  46. 46. Sabit (Constant) Tanımlanması Bir program boyunca değerinin değişmeyeceğini düşündüğümüz veriler Constant (sabit) olarak tanımlanır.  Sabit değişkenlerin değerlerini programın çalışması sırasında değiştirmeye çalışmak hataya yol açar.  Sabitlere ilk değer verilirken sabitler kullanılır.  Sabitler içsel tasarım olarak static olduklarından, ayrıca static olarak tanımlamaya çalışmak hataya yol açar. (http://www.csharpnedir.com) 46
  47. 47. Değer ve Referans Türleri (http://www.csharpnedir.com) 47
  48. 48. Değer Türleri Arası Atama  İki değer tipi nesnesi birbirine eşitlenirken, değişkenlerde saklanan değerler kopyalanarak eşitlenir ve bu durumda iki yeni bağımsız nesne elde edilmiş olur. Yani birisinin değerini değiştirmek diğerini etkilemez. (http://www.csharpnedir.com) 48
  49. 49. Değer Türleri için Varsayılan Değerler Veri Tipi Varsayılan Değer bool False byte 0 char ‘0’ decimal 0.0M double 0.0D enum Enum sabitindeki, 0 indisli değer. float 0.0F Int 0 long 0L SByte 0 Short 0 Struct Yapıdaki tüm değer tipleri varsayılan değer, tüm referans tipleride null değere atanır. Uint 0 Ulong 0 UShort 0 (http://www.csharpnedir.com) 49
  50. 50. Değer Türleri Veri CTS Karşılığı Açıklama Max Min Tipisbyte System.Byte 8 bit işaretli tamsayı -128 127short System.Int16 16 bit işaretli tamsayı -32.768 32.767int System.Int32 32 bit işaretli tamsayı -2.147.483.648 2.147.483.647long System.Int64 64 bit işaretli tamsayı -9.223.372.036.854.775.808 9.223.372.036.854. 775.807byte System.Byte 8 bit işaretsiz tamsayı 0 255ushort System.UInt16 16 bit işaretsiz tamsayı 0 65.535uint System.UInt32 32 bit işaretsiz tamsayı 0 4.294.967.295ulong System.UInt64 64 bit işaretsiz tamsayı 0 18.446.744.073.70 9.551.615float System.Single 32 bit tek kayan sayı +/- 1,5 x 10^-45 +/- 3,4 x 10^38double System.Double 64 bit çift kayan sayı +/- 5 x 10^-324 +/- 1,7 x 10^-308decimal System.Decimal 128 bit ondalıklı sayı +/- 1,5 x 10^-28 +/- 7,9 x 10^28bool System.Boolea Doğru yada yanlış true / false nchar System.Char Karakterleri temsil eder 16- Unicode Karakterleri (http://www.csharpnedir.com) 50
  51. 51. Referans Türleri Önceden tanımlanmış iki referans türü vardır. string veri türü object veri türü (http://www.csharpnedir.com) 51
  52. 52. Tür Dönüşümü Farklı türden değişkenleri aynı ifade içerisinde kullanbilmek için tür dönüşümleri yapılır Bilinçli Tür Dönüşümü Bilinçsiz Tür DönüşümüBüyük Tür Küçük Tür Büyük Tür Küçük Tür YasaklanmıştırKüçük Tür Büyük Tür Küçük Tür Büyük Tür (http://www.csharpnedir.com) 52
  53. 53. Bilinçsiz Tür DönüşümüKüçük TürBüyük Tür; Tür dönüşümünde her hangibir veri kaybı olmaz. Fazla olan bitler 0 ile beslenir. (http://www.csharpnedir.com) 53
  54. 54. Bilinçsiz Tür DönüşümüKüçük TürBüyük Tür; Byte türleri arasında aritmetiksel işlemler yapılırken sonuç mutlaka int yada daha büyük türden bir değişkene aktarılmalıdır. byte a=5; byte b=3; byte c=a+b; Cannot implicitly convert type ‘int’ to ‘byte’ (http://www.csharpnedir.com) 54
  55. 55. Bilinçsiz Tür DönüşümüKüçük TürBüyük Tür; Tür Dönüşebileceği Tür sbyte short,int,float,long,double,decimal byte short,ushort,int,uint, long,ulong,float,double,decimal short int,long,float,double,decimal ushort int,uint,long,ulong,float,double,decimal int long,float,double,decimal uint long,ulong,float,double,decimal long, ulong float,double,decimal char ushort,int,uint,long,ulong,float,double,decimal float double (http://www.csharpnedir.com) 55
  56. 56. Bilinçli Tür Dönüşümü Derleyicinin izin vermediği tür dönüşümlerinde yapılır. Veri kayıplarına sebep olabilir. Küçük Tür Büyük Tür dönüşümleri, bilinçsiz türde olduğu gibidir. Dönüşümler için tür dönüşüm operatörleri kullanılır. (http://www.csharpnedir.com) 56
  57. 57. Bilinçli Tür DönüşümüBüyük TürKüçük Tür; Bilinçli olarak büyük türler, küçük türlere çevrilirken veri kayıpları olabilir. (http://www.csharpnedir.com) 57
  58. 58. Checked ve Unchecked Anahtar Sözcükleri Bilinçli tür dönüşümleri sonucu oluşabilecek veri kayıplarının önüne geçmek için, tür dönüşümlerinin yer aldığı kodları checked blokları içine alırız. Böylece, exception türetilmesi sağlanır. Checked bloklarında tanımlanan değişkenler blok dışında tanınlanamazlar. Checked kod bloğunun içinde veri kayıplarına neden olabilecek durumların göz ardı edilmesi gerekirse unchecked blokları kullanılır. (http://www.csharpnedir.com) 58
  59. 59. Boxing (Kutulama) Bir nesnenin object türüne bilinçli yada bilinçsiz dönüştürülmesidir. Stack bölgesinde tutulan veri bit olarak heap alanına kopyalanır. (http://www.csharpnedir.com) 59
  60. 60. UnBoxing (Kutuyu Kaldırmak)Heap bölgesindeki nesnenin değerini bit olarak stack bölgesine kopyalar. Unboxing işlemine tabi tutulacak veri önceden boxing işlemine tutulmuş olmalıdır. Unboxing işlemi sırasında doğru tür dönüşümü kullanılmalıdır. (http://www.csharpnedir.com) 60
  61. 61. Convert.ToString Metodu ToString metodu System isim alanındaki Convert sınıfına ait bir metottur. Convert sınıfının diğer metodlar genellikle, string türde verileri, diğer veri türlerine dönüştürmek için kullanırız. (http://www.csharpnedir.com) 61
  62. 62. Convert Sınıfı Metod Açıklama Convert.ToBoolean(string str) string str nesnesini bool türüne çevirir. Convert.ToByte(string str) string str nesnesini byte türüne çevirir. Convert.ToSByte(string str) string str nesnesini Signed byte türüne çevirir. Convert.ToInt16(string str) string str nesnesini short türüne çevirir. Convert.ToUInt16(string str) string str nesnesini ushort türüne çevirir. Convert.ToInt32(string str) string str nesnesini int türüne çevirir. Convert.ToUInt32(string str) string str nesnesini uint türüne çevirir. Convert.ToInt64(string str) string str nesnesini long türüne çevirir. Convert.ToUInt64(string str) string str nesnesini ulong türüne çevirir. Convert.ToSingle(string str) string str nesnesini float türüne çevirir. Convert.ToDouble(string str) string str nesnesini double türüne çevirir. Convert.ToDecimal(string str) string str nesnesini decimal türüne çevirir. Convert.ToChar(string str) string str nesnesini char türüne çevirir. (http://www.csharpnedir.com) 62
  63. 63. Operatör Nedir? Önceden tanımlanmış bir takım matematiksel yada mantıksal işlemleri yapmak için kullanılan özel karakter yada karakterler topluluğudur. (http://www.csharpnedir.com) 63
  64. 64. Operatörlerin Sınıflandırılması (), [], ++, --, +, -, ~, new, checked, Unary unchecked, typeof, sizeof *, /, %, +, -, <, <=, >, >=, as, is, <<,Yapılarına Göre >>, ==, !=, &, ^, |, &&, ||, =, *=, /=, BinarySınıflandırma +=, -=, <<=, >>=, &=, ^=, |= ?: Ternary Aritmetik (Arithmetic) +, -, *, /, %, ++, -- Karşılaştırma >, <, >=, <=, ==, !=, as, is (Comparison) Mantıksal (Logical) ||, &&, !İşlvelerine GöreSınıflandırma Bitsel (Bitwise) |, &, ~, ^, <<, >> Atama ve İşlemli =, *=, +=, -=, /=, <<=, =>>, &=, ^=, | Atama(Assignment) = ?:, (), [],+, -, &, *, ->, ., new, Özel Amaçlı (Special Case) checked, unchecked, typeof, sizeof (http://www.csharpnedir.com) 64
  65. 65. Operatör Önceliği Öncelik OperatörBirincil Öncelik x.Y(nesne erişim operatörü), f(x), dizi[x], x++, x--, new, typeof, checked, uncheckedUnary Operatörler +, -, !, ~, ++x, --x, (tür)xÇarpma Bölme Operatörleri *, /, %Toplama Çıkarma Operatörleri -, +Kaydırma Operatörleri <<, >>İlişkisel ve Tür Testi Operatörleri <, >,<=, >=, is, asEşitlik Operatörleri ==, !=Mantıksa ve &Mantıksal Özel veya ^Mantıksal Veya |Koşullu ve &&Koşullu veya ||Koşul Operatörü ?:Atama ve işlemli atama Operatörleri =, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |= (http://www.csharpnedir.com) 65
  66. 66. Aritmetik OperatörlerToplama ve Çıkarma ;int i =50+40;float f=12.56f + 11.4f;Bölme ve Çarpma ; float f = 50f / 40f; sonuç float değişkene aktarıldığından 1,25 int d = 50 / 40; sonuç int değişkene aktarıldığından virgülden sonraki kısım atılır. Sonuç 1 olur.% Kalan c = 10 % 3; Birinci operand’ın ikinci operanda bölümünden kalanı verir. Sonuç 1 dir. (http://www.csharpnedir.com) 66
  67. 67. Aritmetik Operatörler++ Arttırma ve -- Azaltma int a=10; int b; int c; b=a++; c=++a; a=? b=? c=? (http://www.csharpnedir.com) 67
  68. 68. Aritmetik Operatörler++ Arttırma ve -- Azaltmaint a=10;int b;int c;b=a++; İlk önce atama b=10 Sonra arttırma a=11c=++a; Önce arttırma a=12 Sonra atama c=12 (http://www.csharpnedir.com) 68
  69. 69. Aritmetik Operatörler++ Arttırma ve -- Azaltma b=4 b=a++ a=5 b=4 b=a-- a=3 a=4 a=5 b=++a b=5 a=3 b=--a b=3 (http://www.csharpnedir.com) 69
  70. 70. Karşılaştırma Operatörleri Sonuçlar bool veri tipinden true veya false olurBüyüktür > ve Küçüktür <bool b1 = 45 > 40; truebool b2 = 40 < 30; falseBüyüktür eşittir >= ve Küçüktür Eşittir <= ;bool b1 = 50 <= 50; truebool b2 = 50 >= 45; trueEşittir == ve Eşit Değildir != ;bool b1 = 50 = 48; falsebool b2 = 50 != 48; true (http://www.csharpnedir.com) 70
  71. 71. Karşılaştırma Operatörlerias operatörü Uygun türler arasındaki dönüşümü sağlar. Üretilen değer referans türündendir. Dönüşüm işlemi başarısız olursa null değer üretilir. object o=“50”; string s=o as string; is operatörü Çalışma zamanında bir nesnenin türünün operand ile verilen türe uyumlu olup olmadığını kontrol eder. Üretilen değer true yada false olur. int i=50; bool b1 = i is int; true bool b2 = i is double; false (http://www.csharpnedir.com) 71
  72. 72. Mantıksal OperatörlerVE && Operatörü; 1nci Operand İkinci Operand Sonuç true true true true false false false true false false false falseİki operandda true ise true döner, aksi hallerde false döner.bool b1 = 10 < 20 && 10 == 50; true && false falsebool b1 = 10 < 20 && 10 == 10; true (http://www.csharpnedir.com) 72
  73. 73. Mantıksal OperatörlerVEYA || Operatörü; 1nci Operand İkinci Operand Sonuç true true true true false true false true true false false falseOperandlardan en az birisi true ise true döner.bool b1 = 10 < 20 || 10 == 50; true || false truebool b1 = 10 > 20 && 10 == 11; false (http://www.csharpnedir.com) 73
  74. 74. Mantıksal OperatörlerDEĞİL ! Operatörü; Operand Sonuç true false false trueOperandın mantıksal değilini verir.bool b1 = ! (10 < 20) ; ! true false (http://www.csharpnedir.com) 74
  75. 75. Bitsel Operatörler Sayıların bütünü değil, sayıları oluşturan bitler üzerinde kullanılır. Sadece tam sayılarda kullanılır. Gerçel sayılarda kullanılamaz. Bitlerin durumlarını öğrenmek, bitleri 0 yada 1 yapmak gibi alt seviye işlemlerde kullanılırlar. (http://www.csharpnedir.com) 75
  76. 76. Bitsel OperatörlerBİTSEL DEĞİL ~ Operatörü; Bit Sonuç 1 leri 0, 0 ları 1 yapar. Bu aynı zamanda sayının tümleyeninin 1 0 bulunmasıdır. 0 1 byte a = 255; 11111111 byte b= (byte) ~ 255; ~ 11111111 00000000 (http://www.csharpnedir.com) 76
  77. 77. Bitsel OperatörlerBİTSEL VE & Operatörü;1nci Bit 2 nci Bit Sonuç Her iki bit 1 ise, 1 döner. Aksi halde 0 döner. 1 1 1 1 0 0 0 1 0 0 0 0 byte a = 145; 10010001 byte b=73; 01001001 int c=(byte) ( a & b); & 00000001 (http://www.csharpnedir.com) 77
  78. 78. Bitsel OperatörlerBİTSEL VE & Operatörü; Bir sayıyı bütün bitleri 1 olan bir sayı ile bitsel ve işlemine sokmak, sayının değerini değiştirmez. Çünkü 1 bitsel ve işleminde etkisiz elemandır. Bir sayıyı bütün bitleri 0 olan bir sayı ile bitsel ve işlemine sokmak sayının değerini 0 yapar. Çünkü 0 bitsel ve işleminde yutan elemandır. (http://www.csharpnedir.com) 78
  79. 79. Bitsel OperatörlerBİTSEL VEYA | Operatörü;1nci Bit 2 nci Bit Sonuç Bitlerden en az birisi 1 ise, 1 döner. 1 1 1 1 0 1 0 1 1 0 0 0 byte a = 145; 10010001 byte b=73; 01001001 int c=(byte) ( a | b); | 11011001 (http://www.csharpnedir.com) 79
  80. 80. Bitsel OperatörlerBİTSEL ÖZEL VEYA ^ Operatörü;1nci Bit 2 nci Bit Sonuç Bitlerden her ikiside farklı ise 1 döner. 1 1 0 1 0 1 0 1 1 0 0 0 (http://www.csharpnedir.com) 80
  81. 81. Bitsel OperatörlerBİTSEL ÖZEL VEYA ^ Operatörü;Özel veya geri dönüşümlü işlem yapar. Bir sayıyı özel veya işlemine tabituttuktan sonra aynı sayı ile tekrar özel veya işlemine tabi tutmakbaşlangıçtaki sayıyı verir. byte b = 10; 00001010 byte c = 99; 01100011 c=(byte) ( c ^ b ) ; 01101001 c=(byte) ( c ^ b ) ; 01100011 (http://www.csharpnedir.com) 81
  82. 82. Bitsel OperatörlerBİTSEL SOLA KAYDIRMA << Operatörü; Bir sayının bitlerini istenilen sayı kadar sola öteler. İlk bit her zaman 0 ile beslenir, son bit ise ötelemeden dolayı atılır.byte b = 10; 00001010byte c = (byte) ( b << 1 ) ; 000010100 00010100 Sola 1 kez öteleme bir sayının 2 ile çarpılmış halini verir. 2 kez öteleme sayının 4 katını, 3 kez öteleme sayının 8 katını, 4 kez öteleme 16 katını verir. (http://www.csharpnedir.com) 82
  83. 83. Bitsel OperatörlerBİTSEL SAĞA KAYDIRMA >> Operatörü; Bir sayının bitlerini istenilen sayı kadar sağa öteler. Son bit her zaman 0 ile beslenir, ilk bit ise ötelemeden dolayı atılır.byte b = 137; 10001001byte c = (byte) ( b >> 1 ) ; 010001001 01000100 Sağa bir kez öteleme, sayının yarısını verir. Ancak sayı tek sayı ise, bu durumda, çıkan sonucun tam kısmı elde edilir. Yani 7 >> 1 = 3 olur. (http://www.csharpnedir.com) 83
  84. 84. Atama ve İşlemli AtamaOperatörleri= ATAMA Operatörü;Bir değişkene herhangibir değeri atamak için kullanılır.İŞLEMLİ ATAMA Operatörleri;*=, +=, -=, /=, <<=, =>>, &=, ^=, |=a*=b; a=a*b;a+=b; a=a+b;a-=b; a=a-b;a<<=b a=a<<b; ;a^=b; a=a^b;a/=b; a=a/b (http://www.csharpnedir.com) 84
  85. 85. Özel Amaçlı Operatörler?: Operatörü;Koşullu ifadeler için kullanılır.koşul ? doğru_değer : yanlış_değer;str = str + ( sayi == 1 ? “ “ : “LER” ); koşul koşul yanlış ise koşul doğru ise (http://www.csharpnedir.com) 85
  86. 86. Özel Amaçlı Operatörler Operatör İşlevi Örnek() Tür Dönüştürme byte a=2; Tür dönüşümleri için kullanılır.Operatörü int c=(int)a;[] Indeks Operatörü Dizi elemanlarına ulaşmak için kullanılır. int a=dizi[1]; Bir değişkenin negatif (-) yada pozitif (+) int a=10;+ ve - olmasını sağlar. int b=-a; Bir sınıfın yada yapının elemanlarına Console.WriteLine. erişmek için kullanılır. (); Sinif a=newnew Yeni bir nesne oluşturmak için kullanılır. Sinif(); int i=new int();checked / unchecked Her hangibir türe ilişkin System.Type int a=10;typeof sınıfı türünden bir nesne üretir. Type t1=typeof(a); (http://www.csharpnedir.com) 86
  87. 87. Konular Karar Yapıları (if, switch) Döngüler (for,while,do while,foreach) Atlama Deyimleri (goto,return,break,continue) (http://www.csharpnedir.com) 87
  88. 88. Deyim ve İfadeDeyim(statement) Örneği a = (a << b) + c;İfade(expression) Örneği a = (a << b) + c (http://www.csharpnedir.com) 88
  89. 89. if-else Karar Verme YapısıAkış diyagramı (http://www.csharpnedir.com) 89
  90. 90. if-else Karar Verme YapısıKontrollü akış yapmamızı sağlar. if (ifade) bool bir sonuç üretmeli ! deyim1 else if (ifade) deyim2 deyim1 else ifadesi olmayan yapı (http://www.csharpnedir.com) 90
  91. 91. Birleşik if-else Bloklarıİf bloklarında birden fazla deyim çalışabilir. İf (ifade) { deyim1 İf (ifade) deyim2 { } deyim1 else deyim2 { } deyim3 deyim4 } (http://www.csharpnedir.com) 91
  92. 92. Merdiven şeklindeki if-else BloklarıÇoklu koşuldan birini seçme durumu: if (ifade1) deyim1 else if(ifade2) deyim2 Her bir if bloğunda birden fazla else if(ifade3) deyim olabilir? deyim3 else deyim4 (http://www.csharpnedir.com) 92
  93. 93. İçiçe if-else BloklarıGerçek hayatta en çok kullanılan biçim if (kosul1) { if (kosul2) deyim1 else { deyim2 deyim3 } } else deyim4Okunabilirlik açısından süslü parantez kullanmak gerekir. (http://www.csharpnedir.com) 93
  94. 94. Tehlikeli Durum - 1Gözden kaçan durumlar olabilir: if (ifade1); deyim1 Acemi programcıların gecelerini alabilecek bir durumu. int a = 5; if (a != 5); deyim1 Derleme hatası alınmaz. (http://www.csharpnedir.com) 94
  95. 95. Tehlikeli Durum - 2int a = 4,b = 5;if(a != 4) if(b == 5) Console.WriteLine("Doğru");else Console.WriteLine("Yanlış");int a = 4,b = 5;if(a != 4) if(b == 5) Console.WriteLine("Doğru"); else Console.WriteLine("Yanlış"); (http://www.csharpnedir.com) 95
  96. 96. Koşul Operatörü (?:) Kısa if – else blokları yerine kullanılabilir. ?: Operatörü İfade 1 ? İfade 2 : ifade 3 Yanlış KararTest Koşulu (bool) Doğru Karar (http://www.csharpnedir.com) 96
  97. 97. switch-case Koşul İfadesiKompleks if-else blokları yerine okunabilirliği artırmak için tercih edilir. İf-else bloklarına göre daha az yeteneklidir.switch(sabit ifadesi) switch(sabit ifadesi){ { case sabit1 : case sabit1 : deyim1; break; deyim1 case sabit1 : deyim2; break; break; default : deyim3; break; case sabit2 : } deyim2 break; default : Neden hatalı ? deyim3 break;} (http://www.csharpnedir.com) 97
  98. 98. Önemli Kurallar  break deyimi zorunludur.  Bir case deyimi sağlandığı zaman ikinci bir case deyimine goto anahtar sözcüğü ile açıkça belirtilmedikçe geçilemez (C,C++ dillerinde böyle değil)switch(sabit ifadesi) switch(sabit ifadesi){ { case sabit1 : deyim1; case sabit1 : deyim1; goto case 2; case sabit2 : deyim2; break; case sabit2 : deyim2; break; default : deyim3; break; default : deyim3; break;} } Hata : Control cannot fall through from one case label (case 1:) to another (http://www.csharpnedir.com) 98
  99. 99. switch-case Koşul İfadesiOrtak case ifadeleriint a = 2;switch(a){ case 1 : case 2 : Console.WriteLine("Case1 ve Case2");break; case 3 : Console.WriteLine("Case3");break;}* Default yok ! (http://www.csharpnedir.com) 99
  100. 100. Özet case anahtar sözcüğünün yanındaki ifadeler sabit olmak zorundadır. Bu ifadeler içinde değişken bulunamaz. case ifadeleri C#’ ta herhangi bir tamsayı sabiti , karekter yada string sabiti olabilir. default durumunu istediğimiz yere yazabiliriz. Aynı şekilde case ifadelerinide istediğimiz sırada yazabiliriz. Bir switch bloğunda iki yada daha fazla sayıda aynı case ifadesi bulunamaz. Bir switch bloğunda default case olmak zorunda değildir. Akış herhangi bir case ifadesine geldiğinde, akışı farklı bir case ifadesine yönlendirilmek istenirse goto anahtar sözcüğü kullanılır. (http://www.csharpnedir.com) 100
  101. 101. Alıştırma 2 + 3, 2 * 5, 3 / 4 gibi işlemleri yapabilen bir konsol uygulaması yapınız. Her iki operand ve operatör kullanıcı tarafından elle girilecektir. Kitap Kapalı (http://www.csharpnedir.com) 101
  102. 102. Döngüler (Loops) Profesyonel uygulama geliştirmeye ilk adımDöngüler bir yada daha fazla deyimin belirli bir koşulsağlanana kadar bir yada daha fazla sayıda çalıştırılmasını sağlar. for döngüsü while döngüsü do-while döngüsü foreach döngüsü (http://www.csharpnedir.com) 102
  103. 103. for Döngülerifor (ifade1; ifade2; ifade3) for (ifade1; ifade2; ifade3) deyim1; { deyim1; deyim2; ... } ifade1 : Bir defa çalıştırılır. (Akış for döngüsüne geldiğinde) ifade2 : Koşul ifadesidir. Bool türünden değer üretmelidir. İfade3 : Genellikle sayaç görevinde kullanılır. Kullanılmayabilir. (http://www.csharpnedir.com) 103
  104. 104. for döngüsü Animasyonu donguler_flash_for.swf (http://www.csharpnedir.com) 104
  105. 105. Farklı kullanımlarchar ch;for (ch=Convert.ToChar(Console.ReadLine()); ch != q‘ ; ch =Convert.ToChar(Console.ReadLine())) Console.WriteLine(ch);int k = 0; int k = 0; for (; k< 10;)for (; k< 10; ++k) { Console.WriteLine(k);Console.WriteLine(k); ++k; } (http://www.csharpnedir.com) 105
  106. 106. Sonsuz döngüler(!)int k = 0;for (;;){ Console.WriteLine(k); ++k;} (http://www.csharpnedir.com) 106
  107. 107. Örnek1’den 10000 e kadar olan sayılar içerisinde 5’e tam bölünen aynı zamanda 7 ‘ye tam bölünemeyen sayıların sayısını bulan, toplamını bulan ve bu sayıları listeleyen programı yazınız. (http://www.csharpnedir.com) 107
  108. 108. Alıştırma Aşağıdaki ekran görüntüsünü elde edecek programı yazınız. Yıldız dörtgenindeki satır ve sütun sayısı sabit olmamakla beraber kullanıcı tarafından girilecektir. Kitaplar kapalı ! (http://www.csharpnedir.com) 108
  109. 109. while Döngüleriwhile(koşul) while(koşul) deyim { deyim1 deyim2 ... }int n=0;int toplam=0;while(n <= 100){ toplam += n; n += 2;} (http://www.csharpnedir.com) 109
  110. 110. while Döngüleriwhile (--n>=0){ // Bu döngü size neyi ifade ediyor?}while döngü yapısını kullanarak 1’den 100’e kadar olan çiftsayıların toplamını bulan programı yazınız?Kitaplar kapalı ! (http://www.csharpnedir.com) 110
  111. 111. do while Döngülerido do deyim {while(koşul); deyim1 deyim2while(koşul); } deyim while(koşul);do while döngülerinde döngü bloğundaki deyimler en az birkez çalıştırılırlar. (http://www.csharpnedir.com) 111
  112. 112. do while – Klasik Kullanımdo{ Console.Write("Şifreyi giriniz :"); yazi = Console.ReadLine();}while (yazi != "sifre"););while döngüsünden tek farkı döngü koşulunun bulunduğuyerdir. (http://www.csharpnedir.com) 112
  113. 113. foreach Döngü YapısıYeni bir döngü yapısıdır. Diziler ve koleksiyon tabanlınesneleri elemanları arasında dolaşmak için kullanılır.Diziler konusunda daha detaylı inceleyeceğiz.foreach (int x in Dizi){ Console.WriteLine(x);}Döngünün her iterasyonunda elde edilen eleman readonly özelliğine sahiptir. Bu nedenle elle içeriğideğiştirilemez. (http://www.csharpnedir.com) 113
  114. 114. Atlama(Jump) Deyimleri break deyimi continue deyimi return deyimi goto deyimi (!)Atlama deyimi ile ilgili örnekler. (http://www.csharpnedir.com) 114
  115. 115. Diziler Bellekte ardışıl bulunan aynı türden nesneler kümesine dizi denilmektedir. Bir dizi içierisindeki bütün elemanlara aynı isimle ulaşır. Dizilerin eleman sayısı sabittir, sonradan değiştirilemez. Derleme zamanında boyutu bilinmeyebilir. C ve C++’ta bu böyle değildir. (http://www.csharpnedir.com) 115
  116. 116. Diziler Dizi sınırlarını aşmak C ve C++’ ın aksine yasaklanmıştır. Bütün diziler FCL’de System.Array sınıfını karşılık düşerler. Dizilerde temel veri türleri gibi birer tür olarak görülmelidri. Örneğin int türünden biri dizi, object türden bir dizi yada Ogrenci sınıfı türünden bir dizi. (http://www.csharpnedir.com) 116
  117. 117. Dizi değişkenleri tanımlamaint[] dizi = new int[25]; int i = dizi[0]; int i = dizi[7];int[] dizi;dizi = new int[25];Bildirim ve tanımlama arasındaki fark nedir?Yukarıdaki dizi tanımlamalarında bütün dizi elemanlarıvarsayılan olarak 0 değerine atanır.Bunu örnek birprogram ile gösterelim.Varsayılan değer her veri tipi için farklı olacağınıunutmamak gerekir. (http://www.csharpnedir.com) 117
  118. 118. Diğer bir dizi tanımlama biçimistring[] dizi1 = {"Bir","İki","Üç"};int[] dizi2 = {1,2,3}; 3 elemanlı dizilerfloat[] dizi3 = {1f,2f,3f};Yukarıdaki dizi tanımlamalarında bütün dizi elemanlarıvarsayılan olarak 0 değerine atanır.Bunu örnek birprogram ile gösterelim.Varsayılan değer her veri tipi için farklı olacağınıunutmamak gerekir.int[] dizi1=new int[10],dizi2 = new int[10];int[] dizi1,dizi2; (http://www.csharpnedir.com) 118
  119. 119. foreach döngüsü ve dizilerForeach döngü yapısı diziler gibi birden fazla eleman içerenyapılar için tasarlanmıştır.int[] dizi = {1,2,3,4,5};foreach(int eleman in dizi) Console.WriteLine(eleman);int[] dizi = {1,2,3,4,5};foreach(int eleman in dizi) eleman = 5;Yukarıdaki blok doğrumu? (http://www.csharpnedir.com) 119
  120. 120. Çok boyutlu dizilerHer bir elemanı yine bir dizi olan dizi çeşitlerine çok boyutlu dizidenir. Matris dizileri Düzensiz(Jagged) diziler (http://www.csharpnedir.com) 120
  121. 121. Matris Dizileri3X2 boyutlu matris dizisi : 3 satır sayısı, 2 sütun sayısıint[,] dizi = {{1,2},{3,4},{5,6}};dizi[0,0] = 1dizi[0,1] = 2dizi[1,0] = 3dizi[1,1] = 4dizi[2,0] = 5dizi[2,1] = 6 3X4 Matrisi (http://www.csharpnedir.com) 121
  122. 122. Matris DizileriMatris dizileri iki boyutlu olmak zorunda değildir.int[,,] dizi = {{{1,2},{3,4}},{{5,6},{7,8}},{{9,10},{11,12}}};Bu dizi kaç boyutludur ve her boyut kaç eleman içerir?Cevap : 3 boyutlu, Eleman sayısı (3,2,2) dizi[0,0,0]=1 dizi[1,1,0]=7 dizi[0,0,1]=2 dizi[1,1,1]=8 2’den fazla boyutlu diziler gerçek dizi[0,1,0]=3 dizi[2,0,0]=9 hayatta çok fazla kullanılmaz dizi[0,1,1]=4 dizi[2,0,1]=10 dizi[1,0,0]=5 dizi[2,1,0]=11 dizi[1,0,1]=6 dizi[2,1,1]=12 (http://www.csharpnedir.com) 122
  123. 123. Matris Dizileri Elemanlarına ErişimÖrnek program inceleme (http://www.csharpnedir.com) 123
  124. 124. Düzensiz(jagged) DizilerHer bir elemanı farklı sayıda elemanlı dizilerden oluşan dizilerdir int[][] dizi = new int[3][]; //düzensiz dizi tanımlama dizi[0] = new int[3]; dizi[1] = new int[4]; dizi[2] = new int[2]; dizi[0,0] = 1 dizi[0,1] = 2 dizi[1,0] = 3 dizi[1,1] = 4 dizi[2,0] = 5 dizi[2,1] = 6 (http://www.csharpnedir.com) 124
  125. 125. Düzensiz(jagged) DizilerDüzensiz dizilerin elemanlarına ulaşım daha zordur. Çünkübu tür dizilerin kolon sayısı sabit değildir.int[][] dizi = new int[3][];dizi[0] = new int[]{1,2,3};dizi[1] = new int[]{4,5,6,7};dizi[2] = new int[]{8,9};for(int i =0 ; i<dizi.GetLength(0) ; ++i) for(int j = 0 ; j<dizi[i].GetLength(0) ; ++j) Console.WriteLine(dizi[i][j]) (http://www.csharpnedir.com) 125
  126. 126. System.Array SınıfıGüzel özellikleri ve metotları vardır. BinarySearch  Length Clear  Rank Clone  IsReadOnly Copy  IsFixedSize CopyTo GetLength GetValue IndexOf Reverse Özellikler SetValue Sort CreateInstance Metotlar (http://www.csharpnedir.com) 126
  127. 127. CreateInstance() Metodu1-) CreateInstance(Type, int, int, int); Bu metod ile parametre ile verileneleman sayılarda Type türünden 3 boyutlu diziler oluşturulur.2-) CreateInstance(Type, int); Type türünden int ile verilen sayı kadarelemanı olan bir dizi nesnesi oluşturulur.3-) CreateInstance(Type, int[]); Çok boyutlu diziler oluşturmak için kullanılır.Çok boyutlu dizilerin herbirinin kaç elemanlı olduğunu belirlemek için inttürden bir dizi metoda parametre olarak gönderilir.4-) CreateInstance(Type, int, int); Parametre olarak verilen boyutlarda ikiboyutlu dizi nesnesi oluşturur.Bu şekilde oluşturulan dizilerin elemanlarına nasıl ulaşırız? (http://www.csharpnedir.com) 127
  128. 128. Temel dizi işlemleri1-) Dizilerin başka dizilere kopyalanması. (Copy Metodu)2-) Dizilerinin elemanlarını sıralama (Sort Metodu)3-) Dizilerde arama (BinarySearch metodu)4-) Dizi elemanlarını ters çevirme (Reverse metodu) (http://www.csharpnedir.com) 128
  129. 129. ÖrnekHerhangi bir türden dizinin elemanlarını Array sınıfınınReverse() metodunu kullanmadan ters çeviren bir programyazınız.Kitaplar kapalı!Örneğin dizi = {1,2,3,4,5,6} ise sonuç {6,5,4,3,2,1} olmalı (http://www.csharpnedir.com) 129
  130. 130. Metod Nedir? Programın her hangibir yerinde kullanılmak için belirli bir işi yerine getirmek amacıyla tasarlanmış alt programlara denir. Kaynak kodların tekrar kullanılabilirliğini sağlayan yapılardır. (http://www.csharpnedir.com) 130
  131. 131. Bir Metodun Genel Yapısı Metod GövdesiParametreler •parametreler işlenir. Sonuç •işlemler yapılır. (Geri dönüş •bir sonuç üretilir. değeri) Bir metod az ve öz iş yapmalıdır. (http://www.csharpnedir.com) 131
  132. 132. Metod Bildirimi Geri Dönüş Tipi Metodun Adı static int MetodAdi ( int a, string c); { Metoda return ( a + c ); gönderilen parametreler. } Sonuçu geri döndürten anahtar sözcük. (http://www.csharpnedir.com) 132
  133. 133. Metodlar static void Main(string[] args) { Yaz("Burak"); ? Yaz(10.2f); Yaz(12212); Yaz(c); } static void Yaz ( object parametre ) { Console.WriteLine(parametre.ToString()); } (http://www.csharpnedir.com) 133
  134. 134. Metodlar Geri dönüş değeri olmayan metodlarda, return anahtar sözcüğü kullanılabilir mi? ? static void Yaz(object parametre) { Console.WriteLine(parametre.ToString()); return; } (http://www.csharpnedir.com) 134
  135. 135. Metodlar  Aşağıdaki kod neden çalışmaz? ? static void Yaz(int a,int b) { return a+b; } (http://www.csharpnedir.com) 135
  136. 136. Metodlar  Aşağıdaki kod neden çalışmaz? ? static void Main(string[] args) { float a=10; Yaz(a); } static void Yaz(int a) { Console.WriteLine(a); } (http://www.csharpnedir.com) 136
  137. 137. Metodlar  Aşağıdaki kod neden çalışmaz? static void Main(string[] args) ? { float a=10; int b=(int)a; Yaz(b); } static void Yaz(int a) { Console.WriteLine(a); static int Topla(int a) { Console.WriteLine(a); } } (http://www.csharpnedir.com) 137
  138. 138. Metodlar  Aşağıdaki kod neden çalışmaz? static void Main(string[] args) ? { float a=10; } static void Yaz(int a,b) { Console.WriteLine(a); } (http://www.csharpnedir.com) 138
  139. 139. Metodlar  Aşağıdaki kod neden çalışmaz? ? static void Yaz(int a,int b) { int a; } (http://www.csharpnedir.com) 139
  140. 140. Metodlar  Verilen iki sayının en büyüğünü bulan bir metod. ? (http://www.csharpnedir.com) 140
  141. 141. Metod Bildirimi Metodlar isimlendirilirken değişken isimlendirmedeki kurallara uyulur. Bir başka Main metodunu tanımlayamayız. Metodlar çağırılırken parametereler eksiksiz girilmelidir. Metodların geri dönüş değeri herhangibir türden olabilir. Geri dönüş değeri olmayan metodlar void olarak tanımlanır. Metodların geri dönüş değerlerini uyumlu türden bir nesneye atamak gerekir. Void olarak tanımlanmış metodlarda return anahtar kelimesi kullanılmaz. Geri dönüş değerlerinde söz konusu olan gizli tür dönüşümleri ve tür uyumsuzlukları parametreler içinde geçerlidir. Parametre almayan metodlar tanımlanabilir. Bir metod içinde başka bir metod bildirilemez. Metod içinde tanımlı değişkenler metod dışında geçersizdir. Metod parametrelerinin her birinin türü tek tek belirtilmelidir. Virgül kullanımı geçersizdir. Metod parametreleri metodun gövdesinde yeniden bildirilemez. (http://www.csharpnedir.com) 141
  142. 142. Metod Parametresi Olarak Diziler static void DiziYaz ( int[] dizi) { foreach(int i in dizi) { Console.WriteLine(i); } } static void Main() { int[] dizi={1,2,3,4}; DiziYaz (dizi); } (http://www.csharpnedir.com) 142
  143. 143. Metodlar  Herhangibir tipteki bir dizinin tüm elemanlarını ekrana yazdıracak bir metod. static void Yazdir ( Array dizi ) { ? foreach(object eleman in dizi) Console.WriteLine(eleman.ToString()); } [STAThread] static void Main(string[] args){ int[] dizi1=new int[3]; dizi1[0]=1; dizi1[1]=2; dizi1[2]=3; float[] dizi=new float[2]; dizi[0]=1.454f; dizi[1]=1.2323f; Yazdir(dizi1); Yazdir(dizi);} (http://www.csharpnedir.com) 143
  144. 144. Metodlar  Herhangibir tipteki bir dizinin tüm elemanlarını ekrana yazdırırken ikinci bir parametre ile dizi elemanlarını dikey veya ? yatay yazdıracak bir metod. (http://www.csharpnedir.com) 144
  145. 145. Değer ve Referans Parametreleri Değer tipleri metodlara parametre olarak aktarılırken bit bit kopyalanarak aktarılırlar. Metod içinde bu değerin değiştirlmesi orjinal değeri etkilemez. static void DegerTipi( int Deger ) { Deger=50; } static void Main() { int a=10; Console.WriteLine(a); 10 DegerTipi(a); Console.WriteLine(a); 10 } (http://www.csharpnedir.com) 145
  146. 146. Değer ve Referans Parametreleri Referans tipleri metodlara parametre olarak aktarılırken bit bit kopyalanmaz. Kopyalanan sadece referansın heap’ te işaret ettiği adrestir. Metod içinde bu değerin değiştirlmesi orjinal değeride etkiler. static void DegerTipi( string[] Deger ) { Deger[0]=“50”; } static void Main() { string[] a={“10”,”5”,”4”}; Console.WriteLine(a[0]); 10 DegerTipi(a); Console.WriteLine(a[0]); 50 } (http://www.csharpnedir.com) 146
  147. 147. ref ve out Anahtar Sözcükleri Değer tiplerini metodlara referans olarak aktarmaya zorlamak için ref ve out anahtar sözcükleri kullanılır. static void DenemeRef ( ref int x ) { x = 50 ; } static void Main() { ref ile tanımlanmış parametrelere int x=10; ilk değer verilmek zorundadır. DenemeRef( ref x); Console.WriteLine(x); 50 } (http://www.csharpnedir.com) 147
  148. 148. ref ve out Anahtar Sözcükleri out anahtar sözcüğü parametre için ilk değer verme zorunluluğunu ortadan kaldırır. static void DenemeRef ( out int x ) { x = 50 ; } static void Main() { DenemeRef( out x); Console.WriteLine(x); 50 } (http://www.csharpnedir.com) 148
  149. 149. Metodların Aşırı Yüklenmesi Aynı(benzer) amaca hizmet eden, aynı isimde birden fazla metodun oluşturulmasına, metodların aşırı yüklenmesi denir. Derleyici aynı isimli metodları ayırt etmek için, metod imzalarına bakar. (http://www.csharpnedir.com) 149
  150. 150. Metodların Aşırı YüklenmesiMetod İmzası;static void Metod1 ( int x, int y )  Metod imzası, parametre{ sayısı ve parametrelerin... veri tiplerinden oluşur.}  Metodun geri dönüşstatic void Metod1 ( float x, float y) değerinin metod imzasında{ bir rolü yoktur....}static void Metod1 (string x, string y){...} (http://www.csharpnedir.com) 150
  151. 151. Overloading  Toplam metodu için overloading.  İki integer değeri toplayacak.  İki double değeri toplayacak. ?  Integer bir dizideki tüm elemanları toplayacak.  İki string değeri metinsel olarak birleştirecek. (http://www.csharpnedir.com) 151
  152. 152. Değişken Sayıda Parametre Alan Metodlar Bir metoda değişken sayıda parametre aktarmak için params anahtar kelimesi kullanılır. Bu sayede istediğimiz sayıda parametreyi metoda gönderebiliriz. static int Toplam ( params int[ ] sayilar ) { ... } static void Yaz ( int bicim, params int[ ] sayilar ) { ... } (http://www.csharpnedir.com) 152
  153. 153. Değişken Sayıda Parametre Alan Metodlar Değişken sayıda parametre içeren metodlar, aşırı yüklenmiş metodlar olduklarında değerlendirmeye alınmazlar. static int Yaz ( int bicim, params object[ ] o ) { ... } static void Yaz ( int bicim, object b ) { ... } iki parametre alıyor. Her iki Yaz metodunada Yaz ( 0, 5 ); uyar. Ancak params metod imzasında dikkate alınmadığından, ikinci Yaz metodu çağırılır. Yaz ( 0 , 5 , 3 , 4 ); Ancak şimdi params içeren metod çağırılır. (http://www.csharpnedir.com) 153
  154. 154. Özyinelemeli (Recursive) Metodlar Metod gövdesinden kendisini çağıran metodlara denir. (http://www.csharpnedir.com) 154
  155. 155. Özyinelemeli (Recursive) MetodlarFaktöryel Hesabı ; n! = n.(n-1).(n-2).(n-3);static int Faktoryel ( int a ){ if (a==0) return 1; return a * Faktoryel ( a – 1 );}3!Faktoryel ( 3 ); 3 * Faktoryel ( 2 ); 3 * 2 * Faktoryel ( 1 ); 3 * 2 * 1 * Faktoryel ( 0 ); 6 (http://www.csharpnedir.com) 155
  156. 156. Main Metodu Main metodu programın çalışmaya başladığı noktadır. Main metodununda aşırı yüklenmiş versiyonları vardır. (http://www.csharpnedir.com) 156
  157. 157. Main Metodu Main metodu geri dönüş değerine sahip olabilir. Main metodu parametre alarak, komut satırı argümanlarının program içinde kullanılabilmesine olanak sağlar. static int Main ( string [ ] args ) { for ( int i=0; i < args.Length ; ++i ) { ... } } (http://www.csharpnedir.com) 157
  158. 158. Main Metodu  Main metodu komut satırından 3 parametre alacak.  1ncisi 4 işlemi temsil eden bir değer. ? (char)  2nci ve 3üncü parametreler ise 4 işlem için gerekli operandlar. (http://www.csharpnedir.com) 158
  159. 159. Uygulama Kendisine değişken sayıda parametre olarak gelen bütün sayıların karekökünü bir diziye aktarıp, bu dizinin referansı ile geri dönecek ? bir metod. (http://www.csharpnedir.com) 159
  160. 160. Uygulama - Fibonacci ? Fibonacci Dizisini belirli bir değer için hesaplayan program.  0 1 1 2 3 5 8 13 24...  Fibonacci(n)=Fibonacci(n-1)+Fibonacci(n-2) (http://www.csharpnedir.com) 160
  161. 161. Uygulama - Fibonaccistatic int Fibo(int deger){ if(deger==0) return 0; if(deger==1) return 1; return Fibo(deger-1)+Fibo(deger-2);}[STAThread]static void Main(string[] args){ for(int i=1;i<=8;i++) { Console.Write(Fibo(i).ToString()+" "); }} (http://www.csharpnedir.com) 161
  162. 162. Sınıflar Nesne Yönelimli Programlama tekniğinin temel yapı taşıdır. Sınıflar birer veri yapısıdır. Programcıya bir veri modeli sunar. Bu veri modeli yardımıyla nesneler oluşturulur. (http://www.csharpnedir.com) 162
  163. 163. Sınıflar sınıf tanımlamaları class anahtar sözcüğü ile başlar. class KrediHesabi sınıfın adı { public ulong HesapNo; Sınıfın üye elemanları public double Limit; özellikler(değişkenler) public string KartSahibi; ve metodlardır. } Erişim belirleyicileri ; public, private, protected, internal veya protected internal. Varsayılan erişim belirleyici değeri private ‘ tır. (http://www.csharpnedir.com) 163
  164. 164. Sınıf Nesneleri Tanımlama class KrediHesabi { Bir sınıf nesnesi oluşturmakSınıf public ulong HesapNo; için new anahtar sözcüğüTanımı public double Limit; kullanılır. public string KartSahibi; } class AnaSinif { static void Main() { KrediHesabi hesap = new KrediHesabi ( ) ; hesap.HesapNo=565656556; Sınıf üye elemanlarına hesap.Limit=100000000; hesap.KartSahibi=“Sefer Algan”; ulaşmak için . operatörü } kullanılır. }  Sınıf tanımlamaları için bellekte yer ayrılmaz. Sınıf tanımı, oluşturulan nesnelerin, derleyiciyi için neye benzeyeceğini gösterir. (http://www.csharpnedir.com) 164
  165. 165. Sınıf Üyelerinde Erişim Belirleyicilerin Rolü class KrediHesabi {Sınıf private ulong HesapNo; Bu üyelere, private oldukları içinTanımı double Limit; sadece KrediHesabi sınıfından erişilebilir. public string KartSahibi; public üyelere diğer sınıflardanda } erişilebilir. class AnaSinif { static void Main() { KrediHesabi hesap = new KrediHesabi ( ) ; hesap.HesapNo=565656556; KrediHesabi.Limit is hesap.Limit=100000000; inaccessible hesap.KartSahibi=“Sefer Algan”; due to its } protection level. } (http://www.csharpnedir.com) 165
  166. 166. Sınıf Nesneleri Arası Atamaclass AnaSinif{ static void Main() { KrediHesabi hesap1 = new KrediHesabi ( ) ; Hesap2 nesnesi KrediHesabi hesap2; tanımlandı ancak bellekte henüz yer tahsis edilmedi. hesap1.HesapNo=4545454; Hesap2 nesnesi hesap2=hesap1; artık Hesap1 nesnesinin hesap2.HesapNo=1111111; heap’te gösterdiği adresi } referans eder.} (http://www.csharpnedir.com) 166
  167. 167. Sınıf Nesneleri Arası Atama KrediHesabi hesap1 = new KrediHesabi(); KrediHesabi hesap2; Stack Heap hesap1 @ hesap2 HesapNo @ Limit Kart Sahibi (http://www.csharpnedir.com) 167
  168. 168. Sınıf Nesneleri Arası Atama hesap2 = hesap1 ; Stack Heap hesap1 @ hesap2 HesapNo @ Limit Kart Sahibi (http://www.csharpnedir.com) 168
  169. 169. Sınıflara Metod Eklemek class Dortgen { public int En; public int Boy; public void EnBoyBelirle ( int e, int b ) {class metod tanımı En=e;tanımı Boy=b; } public int Alan ( ) { metod tanımı return En*Boy; } } Erişim Belirleyicileri Geri Dönüş Tipi Metod Adı Parametreler (http://www.csharpnedir.com) 169
  170. 170. Dörtgen Sınıfı ? Dörtgen Sınıfı  Kare ve dikdörtgenlerin alanının hesaplayacak Alan metodu.  Dörtgenin En ve Boy alanları.  Dörtgenin En ve Boy alanlarınını değerlerini belirleyecek metod.  Dörtgene ait verileri (en, boy, alan) yazdıracak metod. (http://www.csharpnedir.com) 170
  171. 171. Metodlar EnBoyBelirle metoduna neden ihtiyacımız var? ? Cevap : Dortgen sınıfı içindeki, en ve boy alanlarına girilen değerlerin belirli bir aralıkta olup olmadığını kontrol edebilmek için. (http://www.csharpnedir.com) 171
  172. 172. Özellik TanımlamaÖzellikler, sınıf içi alanların, dış ortamdan saklanmasıbir başka deyişle kapsüllenerek erişimlerinin kontrolaltına alınmasını sağlar. (http://www.csharpnedir.com) 172
  173. 173. Özellik Tanımlama class Dortgen { private int mEn; Bu sınıf dışından bu alanlara private int mBoy; doğrudan erişilemez. public int En { alanın değerini döndürür. get { return mEn; }Özellik set alana değer verir.tanımı. { if ( value < 0 ) mEn=0; else mEn= value ; } } ... alana atanacak değeri temsil eder. (http://www.csharpnedir.com) 173
  174. 174. Özellikleri Kullanmak En özelliğinin set bloğu Dortgen d1=new Dortgen (); çalışır. value değeri 25 olur.özelliklerin değerleri d1. En = 25 ;atanıyor. d1. Boy = 40; Boy özelliğinin set bloğu çalışır. value değeri 40 olur. Console.WriteLine ( d1 . En ) ; Console.WriteLine ( d1 . Boy ) ; Boy ve en özelliklerinin değerilerine erişiliyor. get blokları çalışır. return ile değer geri döner. (http://www.csharpnedir.com) 174
  175. 175. Dortgen Sınıfının Tekrarı Sınıfın Üyeleri Özellikler private En private Boy Metodlar public int Alan public void EnBoyBelirle public void Yaz public bool Karemi public double KosegenBul (http://www.csharpnedir.com) 175
  176. 176. Yapıcı Metodlar ( Constructors ) Bir nesne dinamik olarak oluşturulduğunda otomatik olarak çalıştırılan metodlardır. Nesnenin üye elemanlarına ilk değerlerini vermek yada sınıf nesnesi için gerekli kaynak düzenlemeleri yapmak için kullanılırlar. Her sınıfın biz tanımlasakta tanımlamasakta otomatik olarak oluşturulan varsayılan bir yapıcı metodu ( default constructor ) vardır. (http://www.csharpnedir.com) 176
  177. 177. Yapıcı Metodlar ( Constructors )Yapıcı metodların geridönüş değeri yoktur.Geri dönüş değerininolmaması metodun class Zaman Yapıcı metodların ismivoid olduğu anlamına sınıf ismi ile aynı olmalıdır. {gelmez. ... public Zaman ( int h, int m, int s ) { Saat = h; Yapıcı Metod Dakika = m; Saniye = s; Yapıcı metodlar } parametreler alabilir. ... } Geri dönüş değeri kavramı olmadığı için return anahtar kelimesi kullanılmamıştır. (http://www.csharpnedir.com) 177
  178. 178. Yapıcı Metodun Çağırılması public Zaman ( int h , int m , int s ) yapıcısını çağırır. Zaman z = new Zaman ( 5 , 59 , 60 ) ; int h int s int m (http://www.csharpnedir.com) 178
  179. 179. Varsayılan Yapıcı Metodlar Her sınıf nesnesinin en az bir varsayılan yapıcı metodu vardır. Varsayılan yapıcı metodlar herhangibir parametre almazlar. Nesnelerin üye elemanlarına varsayılan değerlerini atarlar. Varsayılan yapıcı metodu kendimizde yazabiliriz. Bu durumda derleyicinin önerdiği varsayılan yapıcı yerine bizim yazdığımız varsayılan yapıcı çağırılır. (http://www.csharpnedir.com) 179
  180. 180. Varsayılan Yapıcı Metodlar class Zaman { ... public Zaman ( ) Varsayılan yapıcılar { parametre almazlar.Varsayılan Saat = 4 ;yapıcı Dakika = 10 ; Saniye = 15 ; } ... } ... Zaman sınıfının Zaman z = new Zaman ( ) varsayılan yapıcı metodunu çalıştırır. (http://www.csharpnedir.com) 180
  181. 181. Yapıcı Metodlar ?  Herhangibir sınıftan herhangibir nesne örneğinin oluşturulmasını nasıl önleriz? İspat ediniz. (http://www.csharpnedir.com) 181
  182. 182. Yapıcı Metodların Aşırı Yüklenmesiclass Zaman Aşırı yüklenmiş yapıcıların ayırt edilmesinde, her{ zaman olduğu gibi metod imzaları rol oynar. ... public Zaman (int h , int m , int s ) { Saat = h ; Zaman z = new Zaman (1,15,59); Dakika = m ; Saniye = s; } public Zaman ( int h , int m ) { Saat = h ; Zaman z = new Zaman (1,15); Dakika = m ; Saniye = 0; } ...} (http://www.csharpnedir.com) 182
  183. 183. Yapıcı Metodlarda This Anahtar Sözcüğüclass Zaman{ ... public Zaman (int h , int m , int s ) { Saat = h ; Dakika = m ; Saniye = s; } public Zaman ( int h , int m ) : this ( h , m , 0 ) { } public Zaman ( int h ) : this (h , 0 , 0 ) { } ...} (http://www.csharpnedir.com) 183
  184. 184. Yapıcı Metodlar ?  Bir nesneyi, başka bir nesneden nasıl örneklendirebiliriz ? (http://www.csharpnedir.com) 184
  185. 185. Kopyalayıcı Yapıcı Metodlar Bir sınıf nesnesini yine bir sınıf nesnesi ile oluşturmak için kullanılır.class Zaman{ ... Bu metodlar tek bir public Zaman ( Zaman Yeni ) parametre alır. Bu parametre { sınıf türünden nesnelerdir. Saat = Yeni . Saat ; Dakika = Yeni . Dakika ; Saniye = Yeni . Saniye ; } ...} (http://www.csharpnedir.com) 185
  186. 186. Soru Bu kodun ekran çıktısı ne olur? Neden ? Zaman z1=new Zaman(4,53,12); Zaman z2=new Zaman(2,45,68); z2=z1; z2.S=5; z1.Yaz(); (http://www.csharpnedir.com) 186
  187. 187. Yıkıcı Metodlar ( Destructors ) Yıkıcı Metodlar, Garbage Collector bir nesne için bellekte ayrılan alanı kaynağa iade etmesinden hemen önce çalışır. Bir sınıfın sadece bir yıkıcı metodu olabilir. class Zaman Yıkıcı metodların isimleride, { yapıcalarda olduğu gibi sınıf ismi ... ile aynıdır. ~ Zaman ( ) { Yıkıcı metodlar parametre almazlar. } ... Yıkıcı metod adları ~ karakteri ile başlar. } (http://www.csharpnedir.com) 187
  188. 188. Yıkıcı Metodlarclass Yikici{ ~Yikici() { Console.WriteLine("Yıkıcı Metod çağırıldı"); }}class Class1{ static void Main(string[] args) { { Yikici y=new Yikici(); } Console.WriteLine("Bir seyler"); }} (http://www.csharpnedir.com) 188
  189. 189. Statik Metodlar Statik metodlar, bir işlevi gerçekleştirmek için, bir nesne tanımlanmasına gerek olmadığı durumlarda kullanılır. class Cebir { public static int Topla ( params int[] dizi ) { int toplam=0;static metodlar for ( int i = 0; i<dizi.Length; i++)static anahtar sözcüğü {ile tanımlanır. toplam += dizi[i]; } return toplam; } } (http://www.csharpnedir.com) 189
  190. 190. Statik Metodlar int t; t = Cebir . Topla ( 4 , 5 , 6 ) ;Static metodlara erişmek için, nesne tanımlamaya gerek yoktur.Static metoda, sınıf adı ve nokta notasyonu yardımıyla erişilir.  Static bir metod içinden normal bir sınıf metodu çağırılamaz. Ancak bir static metod içinden başka bir static metod çağırılabilir.  Nesneler ile doğrudan iş yapmayan metodları static olarak tanımlarız. (http://www.csharpnedir.com) 190
  191. 191. Static Yapıcı MetodlarStatic yapıcılar, bir sınıfın static değişkenleri ile ilgiliişlemlerde kullanılır. class Oyuncu { public Oyuncu( )  static yapıcı metodlar parametre { almazlar. }  public gibi bir erişim belirleyicisine sahip olamazlar. static Oyuncu ( )static {  Bir nesneyi hangi yapıcı metod ileyapıcı oluşturursak oluşturalım, staticmetod } yapıcı metod ilk nesne } yaratıldığında bir kez çalıştırılır. (http://www.csharpnedir.com) 191
  192. 192. Üçü bir arada.public class Statik{ public static int a; public static string b; ?  Bu kodun ekran çıktısı ne olur? public static bool c; public Statik(){} static Statik(){}}class Class1{ [STAThread] static void Main(string[] args){ Console.WriteLine(Statik.a); Console.WriteLine(Statik.b); Console.WriteLine(Statik.c); }} (http://www.csharpnedir.com) 192

×