SlideShare une entreprise Scribd logo
1  sur  665
.NET Framework ve C#’a Giriş

        C# Akademi




        (http://www.csharpnedir.com)   1
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
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
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
.NET ne işe yarar ?

                  Web site                      Arkaplan
                                                  Uyg.
                                                            Mega
                                                            Servis
                  Web site                      Arkaplan
                                                  Uyg.




                   Web site                                Mega
                                                           Servis



                 (http://www.csharpnedir.com)         5
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
.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
.NET Framework Bileşenleri

İki ana bileşen

   FCL – Framework Class Library

   CLR – Common Language Runtime




                     (http://www.csharpnedir.com)   8
.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
CLR : Çalışma Modeli
Kaynak     VB               C#                  C++
kod                                                       Yönetilmeyen
         Derleyici       Derleyici          Derleyici      Bileşenler

Ara      Assembly        Assembly           Assembly
          IL Kodu         IL Kodu            IL Kodu
kod


  CLR - Common Language Runtime

                     JIT Derleyicis


                        Doğal(Native) Kod

                     İşletim Sistemi Servisleri


                           (http://www.csharpnedir.com)    10
Ö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
                                                                              Makine
Uygulama            CLR                                        JIT             Kodu
                                     METADATA




                                (http://www.csharpnedir.com)                 11
.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
Bazı kütüphaneler
Namespace(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
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
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
Çö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
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
C# tipi   Boyut    .NET tipi   Aralık

Tü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
CLS - Common Language Specification
Ortak 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
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
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
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
Assembly Yükleme

   Strongly Named Assemblies (Public
    Assembly)
    (GAC Kurulumu)
   Private Assemblies
    (XCOPY Kurulum)
   Tek farkı kurulumla ilgilidir.




                            (http://www.csharpnedir.com)   23
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
Private Assemblies

   Tekil ID yok
   Uygulama dizininde
    bulunur
   XCOPY kurulumu
    yapılabilir. Uygulama ile
    taşınmalıdır.




                        (http://www.csharpnedir.com)   25
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
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
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
Merhaba Dünya
Class ilk_program1
{
  static void Main()
  {
      System.Console.WriteLine(“Merhaba
  Dünya”);
  }
}



                 (http://www.csharpnedir.com)   29
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
Merhaba Dünya
Bir 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
Merhaba Dünya
Bir 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
Merhaba Dünya
using 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
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
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
Bellek Alanları
   Stack

           Heap

                  Register

                              Static

                                         Constant

                                                   Ram Olmayan
                                                      Bölge

                    (http://www.csharpnedir.com)         36
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
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
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
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
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
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
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
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
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
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
Değer ve Referans Türleri




           (http://www.csharpnedir.com)   47
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
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
Değer Türleri
  Veri
           CTS Karşılığı          Açıklama                          Max                           Min
  Tipi
sbyte     System.Byte      8 bit işaretli tamsayı     -128                               127
short     System.Int16     16 bit işaretli tamsayı    -32.768                            32.767
int       System.Int32     32 bit işaretli tamsayı    -2.147.483.648                     2.147.483.647
long      System.Int64     64 bit işaretli tamsayı    -9.223.372.036.854.775.808         9.223.372.036.854.
                                                                                         775.807
byte      System.Byte      8 bit işaretsiz tamsayı    0                                  255
ushort    System.UInt16    16 bit işaretsiz tamsayı   0                                  65.535
uint      System.UInt32    32 bit işaretsiz tamsayı   0                                  4.294.967.295
ulong     System.UInt64    64 bit işaretsiz tamsayı   0                                  18.446.744.073.70
                                                                                         9.551.615
float     System.Single    32 bit tek kayan sayı      +/- 1,5 x 10^-45                   +/- 3,4 x 10^38
double    System.Double    64 bit çift kayan sayı     +/- 5 x 10^-324                    +/- 1,7 x 10^-308
decimal   System.Decimal   128 bit ondalıklı sayı     +/- 1,5 x 10^-28                   +/- 7,9 x 10^28
bool      System.Boolea    Doğru yada yanlış                              true / false
          n
char      System.Char      Karakterleri temsil eder                 16- Unicode Karakterleri

                                     (http://www.csharpnedir.com)                 50
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
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ır




Küçük Tür Büyük Tür                                             Küçük Tür Büyük Tür




                               (http://www.csharpnedir.com)        52
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
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
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
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
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
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
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
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
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
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
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
Operatörlerin Sınıflandırılması
                                                    (), [], ++, --, +, -, ~, new, checked,
                  Unary                             unchecked, typeof, sizeof
                                                    *, /, %, +, -, <, <=, >, >=, as, is, <<,
Yapılarına Göre                                     >>, ==, !=, &, ^, |, &&, ||, =, *=, /=,
                  Binary
Sınıflandırma                                       +=, -=, <<=, >>=, &=, ^=, |=
                                                    ?:
                  Ternary

                  Aritmetik (Arithmetic)            +, -, *, /, %, ++, --
                  Karşılaştırma                     >, <, >=, <=, ==, !=, as, is
                  (Comparison)
                  Mantıksal (Logical)               ||, &&, !
İşlvelerine Göre
Sı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
Operatör Önceliği
                       Öncelik                                            Operatör
Birincil Öncelik                                    x.Y(nesne erişim operatörü), f(x), dizi[x], x++, x--,
                                                    new, typeof, checked, unchecked
Unary 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, as
Eş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
Aritmetik Operatörler
Toplama 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
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
Aritmetik Operatörler
++ Arttırma ve -- Azaltma

int a=10;
int b;
int c;
b=a++;                  İlk önce atama b=10

                        Sonra arttırma a=11


c=++a;                  Önce arttırma a=12

                        Sonra atama c=12




                            (http://www.csharpnedir.com)   68
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
Karşılaştırma Operatörleri
             Sonuçlar bool veri tipinden true veya false olur

Büyüktür > ve Küçüktür <

bool b1 = 45 > 40;                    true

bool b2 = 40 < 30;                   false

Büyüktür eşittir >= ve Küçüktür Eşittir <= ;

bool b1 = 50 <= 50;                   true

bool b2 = 50 >= 45;                   true
Eşittir == ve Eşit Değildir != ;

bool b1 = 50 = 48;                   false

bool b2 = 50 != 48;                   true

                              (http://www.csharpnedir.com)      70
Karşılaştırma Operatörleri
as 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
Mantıksal Operatörler
VE && 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                 false

bool b1 = 10 < 20 && 10 == 10;               true

                           (http://www.csharpnedir.com)           72
Mantıksal Operatörler
VEYA || Operatörü;
   1nci Operand         İkinci Operand                    Sonuç
        true                     true                     true
        true                   false                      true
        false                    true                     true
        false                  false                      false
Operandlardan en az birisi true ise true döner.

bool b1 = 10 < 20 || 10 == 50;

           true   ||   false                 true

bool b1 = 10 > 20 && 10 == 11;               false

                           (http://www.csharpnedir.com)           73
Mantıksal Operatörler
DEĞİL ! Operatörü;
     Operand              Sonuç
       true                false
       false                true

Operandın mantıksal değilini verir.

bool b1 = ! (10 < 20) ;


          ! true            false




                           (http://www.csharpnedir.com)   74
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
Bitsel Operatörler
Bİ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
Bitsel Operatörler
Bİ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
Bitsel Operatörler
Bİ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
Bitsel Operatörler
Bİ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
Bitsel Operatörler
Bİ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
Bitsel Operatörler
BİTSEL ÖZEL VEYA ^ Operatörü;
Özel veya geri dönüşümlü işlem yapar. Bir sayıyı özel veya işlemine tabi
tuttuktan sonra aynı sayı ile tekrar özel veya işlemine tabi tutmak
baş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
Bitsel Operatörler
Bİ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;                                                  00001010

byte 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
Bitsel Operatörler
Bİ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;                                                 10001001

byte 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
Atama ve İşlemli Atama
Operatö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
Ö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
Ö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=new
new                   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
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
Deyim ve İfade
Deyim(statement) Örneği

        a = (a << b) + c;

İfade(expression) Örneği

        a = (a << b) + c



                    (http://www.csharpnedir.com)   88
if-else Karar Verme Yapısı
Akış diyagramı




                 (http://www.csharpnedir.com)   89
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
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
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
İçiçe if-else Blokları
Gerçek hayatta en çok kullanılan biçim
 if (kosul1)
 {
          if (kosul2)
                   deyim1
          else
          {
                   deyim2
                   deyim3
          }
 }
 else
          deyim4

Okunabilirlik açısından süslü parantez kullanmak gerekir.

                            (http://www.csharpnedir.com)   93
Tehlikeli Durum - 1
Gö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
Tehlikeli Durum - 2
int 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
Koşul Operatörü (?:)
  Kısa if – else blokları yerine kullanılabilir.
                           ?: Operatörü



                İfade 1 ? İfade 2 : ifade 3



                                                           Yanlış Karar
Test Koşulu (bool)          Doğru Karar



                           (http://www.csharpnedir.com)   96
switch-case Koşul İfadesi
Kompleks 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
Ö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
switch-case Koşul İfadesi
Ortak case ifadeleri

int 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
Ö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
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
Döngüler (Loops)
         Profesyonel uygulama geliştirmeye ilk adım

Döngüler bir yada daha fazla deyimin belirli bir koşul
sağ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
for Döngüleri
for (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
for döngüsü Animasyonu



     donguler_flash_for.swf




            (http://www.csharpnedir.com)   104
Farklı kullanımlar
char 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
Sonsuz döngüler(!)
int k = 0;
for (;;)
{
     Console.WriteLine(k);
     ++k;
}



                 (http://www.csharpnedir.com)   106
Örnek
1’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
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
while Döngüleri
while(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
while Döngüleri
while (--n>=0)
{
  // Bu döngü size neyi ifade ediyor?
}

while döngü yapısını kullanarak 1’den 100’e kadar olan çift
sayıların toplamını bulan programı yazınız?

Kitaplar kapalı !




                       (http://www.csharpnedir.com)   110
do while Döngüleri
do                        do
       deyim              {
while(koşul);                         deyim1
                                      deyim2
while(koşul);             }
       deyim              while(koşul);

do while döngülerinde döngü bloğundaki deyimler en az bir
kez çalıştırılırlar.




                     (http://www.csharpnedir.com)   111
do while – Klasik Kullanım
do
{
       Console.Write("Şifreyi giriniz :");
       yazi = Console.ReadLine();
}while (yazi != "sifre"););

while döngüsünden tek farkı döngü koşulunun bulunduğu
yerdir.




                       (http://www.csharpnedir.com)   112
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 read
only özelliğine sahiptir. Bu nedenle elle içeriği
değiştirilemez.


                      (http://www.csharpnedir.com)   113
Atlama(Jump) Deyimleri
   break deyimi
   continue deyimi
   return deyimi
   goto deyimi (!)




Atlama deyimi ile ilgili örnekler.




                      (http://www.csharpnedir.com)   114
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
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
Dizi değişkenleri tanımlama
int[] 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 bir
program ile gösterelim.

Varsayılan değer her veri tipi için farklı olacağını
unutmamak gerekir.


                        (http://www.csharpnedir.com)   117
Diğer bir dizi tanımlama biçimi
string[] dizi1 = {"Bir","İki","Üç"};
int[] dizi2 = {1,2,3};                                  3 elemanlı diziler
float[] 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 bir
program 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
foreach döngüsü ve diziler
Foreach döngü yapısı diziler gibi birden fazla eleman içeren
yapı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
Çok boyutlu diziler
Her bir elemanı yine bir dizi olan dizi çeşitlerine çok boyutlu dizi
denir.

 Matris dizileri
 Düzensiz(Jagged) diziler




                        (http://www.csharpnedir.com)   120
Matris Dizileri
3X2 boyutlu matris dizisi : 3 satır sayısı, 2 sütun sayısı

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

dizi[0,0] = 1
dizi[0,1] = 2
dizi[1,0] = 3
dizi[1,1] = 4
dizi[2,0] = 5
dizi[2,1] = 6
                                          3X4 Matrisi


                          (http://www.csharpnedir.com)   121
Matris Dizileri
Matris 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
Matris Dizileri Elemanlarına Erişim
Örnek program inceleme




                   (http://www.csharpnedir.com)   123
Düzensiz(jagged) Diziler
Her 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
Düzensiz(jagged) Diziler
Dü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
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
CreateInstance() Metodu
1-) CreateInstance(Type, int, int, int); Bu metod ile parametre ile verilen
eleman sayılarda Type türünden 3 boyutlu diziler oluşturulur.

2-) CreateInstance(Type, int); Type türünden int ile verilen sayı kadar
elemanı 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 int
türden bir dizi metoda parametre olarak gönderilir.

4-) CreateInstance(Type, int, int); Parametre olarak verilen boyutlarda iki
boyutlu dizi nesnesi oluşturur.

Bu şekilde oluşturulan dizilerin elemanlarına nasıl ulaşırız?


                            (http://www.csharpnedir.com)     127
Temel dizi işlemleri
1-) 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
Örnek
Herhangi bir türden dizinin elemanlarını Array sınıfının
Reverse() metodunu kullanmadan ters çeviren bir program
yazı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
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
Bir Metodun Genel Yapısı

                       Metod Gövdesi

Parametreler      •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
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
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
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
Metodlar
    Aşağıdaki kod neden çalışmaz?
                                                        ?
     static void Yaz(int a,int b)
     {
             return a+b;
     }




                        (http://www.csharpnedir.com)   135
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
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
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
Metodlar
    Aşağıdaki kod neden çalışmaz?
                                                         ?
     static void Yaz(int a,int b)
     {
             int a;
     }




                         (http://www.csharpnedir.com)   139
Metodlar
    Verilen iki sayının en büyüğünü bulan
     bir metod.                                       ?




                      (http://www.csharpnedir.com)   140
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
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
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
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
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
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
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
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
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
Metodların Aşırı Yüklenmesi
Metod İ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
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
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
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
Özyinelemeli (Recursive) Metodlar

   Metod gövdesinden kendisini çağıran
    metodlara denir.




                 (http://www.csharpnedir.com)   154
Özyinelemeli (Recursive) Metodlar
Faktö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
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
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
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
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
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
Uygulama - Fibonacci
static 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
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
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
Sınıf Nesneleri Tanımlama
            class   KrediHesabi
            {                                                       Bir sınıf nesnesi oluşturmak
Sı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
Sınıf Üyelerinde Erişim Belirleyicilerin Rolü
         class   KrediHesabi
         {
Sınıf              private ulong HesapNo;         Bu üyelere, private oldukları için
Tanı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
Sınıf Nesneleri Arası Atama
class 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
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
Sınıf Nesneleri Arası Atama
 hesap2 = hesap1 ;


  Stack                                                        Heap

          hesap1
           @

          hesap2                           HesapNo

           @                               Limit
                                           Kart Sahibi




                     (http://www.csharpnedir.com)        168
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
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
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
Özellik Tanımlama

Özellikler, sınıf içi alanların, dış ortamdan saklanması
bir başka deyişle kapsüllenerek erişimlerinin kontrol
altına alınmasını sağlar.




                      (http://www.csharpnedir.com)   172
Ö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
Ö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
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
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
Yapıcı Metodlar ( Constructors )
Yapıcı metodların geri
dönüş değeri yoktur.
Geri dönüş değerinin
olmaması metodun
                         class Zaman                      Yapıcı metodların ismi
void 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
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
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
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
Yapıcı Metodlar

                                                            ?
    Herhangibir sınıftan herhangibir nesne
     örneğinin oluşturulmasını nasıl önleriz?
     İspat ediniz.




                       (http://www.csharpnedir.com)   181
Yapıcı Metodların Aşırı Yüklenmesi
class 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
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
Yapıcı Metodlar

                                                           ?
    Bir nesneyi, başka bir nesneden nasıl
     örneklendirebiliriz ?




                      (http://www.csharpnedir.com)   184
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
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
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
Yıkıcı Metodlar
class 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
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
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
Static Yapıcı Metodlar
Static yapıcılar, bir sınıfın static değişkenleri ile ilgili
iş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 ile
yapıcı                                     oluşturursak oluşturalım, static
metod
          }                                yapıcı metod ilk nesne
  }                                        yaratıldığında bir kez çalıştırılır.



                              (http://www.csharpnedir.com)       191
Üçü 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
Üçü bir arada.
int a;                                 ?                Bu kodun ekran
                                                         çıktısı ne olur?
public static void Metod()
{
         a=Convert.ToInt32(Console.ReadLine());
         int b=a/2;
         Console.WriteLine(b.ToString());
}
[STAThread]
static void Main(string[] args)
{
         Metod();
}



                          (http://www.csharpnedir.com)            193
Üçü bir arada.
class Oyuncu
{
        public static int Toplam;

        public Oyuncu()
        {
                Oyuncu.Toplam++;             Varsayılan yapıcı
        }

        static Oyuncu()
        {
                 Toplam=0;         static yapıcı
        }

        ~Oyuncu()
        {
               Toplam--;            yıkıcı
        }
}
                           (http://www.csharpnedir.com)          194
Üçü bir arada.
class AnaSinif
{
                                  ?
                                   Bu kod nasıl çalışır?


       static void Main()
       {
               Oyuncu o = new Oyuncu ( ) ;

             Console.WriteLine ( Oyuncu . Toplam ) ;


             Oyuncu x = new Oyuncu ( ) ;
      }
}


                     (http://www.csharpnedir.com)   195
Const Elemanlar
   Programın çalışması sırasında değerinin değişmeyeceği
    düşünülen değişkenler, sabit olarak tanımlanır.

                    public const double PI = 3.14 ;         sabitlere mutlaka
                                                            ilk değer verilmelidir.


    sabitler const anahtar kelimesi ile tanımlanır.


                    Console.WriteLine ( Cebir . PI ) ;

                                sabitlere nesneler üzerinden değil
                                sınıf nokta notasyonu ile erişilebilir.


   Sabit ifadeleri çalışma zamanında değiştirilemez.

                             (http://www.csharpnedir.com)       196
Const Elemanlar
    Sabitler referans tiplerine uygulanamaz.


    İstisnai bir durum olabilir mi?
                                                   ?
    Sabitler referans tiplerinden sadece string türlerine new
     anahtar sözcüğü kullanılmadığı takdirde uygulanabilir. Bir
     sınıfa veya başka bir referans tipine uygulanamaz

               public const string a = “ Burak “ ;




                          (http://www.csharpnedir.com)   197
ReadOnly Elemanlar
   ReadOnly elemanlar, referans tiplerini sabit olarak tanımlamak
    istediğimiz durumlarda kullanılır.
   Readonly elemanların değerleri çalışma zamanında yada derleme
    aşamasında değiştirilemez.

           static readonly Deneme a = new Deneme ( ) ;


    Sabitler ile readonly elemanlar arasındaki tek fark, sabitler
    için ilk değer verilmesinin derleme zamanında, readonly
    elemanlar içinse çalışma zamanıda yapılmasıdır.




                           (http://www.csharpnedir.com)   198
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005
C# Akademi 2005

Contenu connexe

Similaire à C# Akademi 2005

Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008mtcakmak
 
C sharp-dokumani
C sharp-dokumaniC sharp-dokumani
C sharp-dokumanisersld30
 
RPC Zafiyetlerinin Keşfi
RPC Zafiyetlerinin KeşfiRPC Zafiyetlerinin Keşfi
RPC Zafiyetlerinin KeşfiSignalSEC Ltd.
 
C sharp-ornek
C sharp-ornekC sharp-ornek
C sharp-orneksersld30
 
Bilgisayar Mimarisi 06, Feza BUZLUCA
Bilgisayar Mimarisi 06, Feza BUZLUCABilgisayar Mimarisi 06, Feza BUZLUCA
Bilgisayar Mimarisi 06, Feza BUZLUCAFeza BUZLUCA
 
C sharp-egitim-cd-si
C sharp-egitim-cd-siC sharp-egitim-cd-si
C sharp-egitim-cd-sisersld30
 
Kütüphanelerde Web Sitesi Hazırlama ve Uygulama Semineri (FrontPage)
Kütüphanelerde Web Sitesi Hazırlama ve Uygulama Semineri (FrontPage)Kütüphanelerde Web Sitesi Hazırlama ve Uygulama Semineri (FrontPage)
Kütüphanelerde Web Sitesi Hazırlama ve Uygulama Semineri (FrontPage)Kamil Çömlekçi
 
C sharp-ornekleri
C sharp-ornekleriC sharp-ornekleri
C sharp-orneklerisersld30
 
Aspnet temelleri
Aspnet temelleriAspnet temelleri
Aspnet temellerimetehanates
 
Internet Tabanli Yildiz Teknik Universitesi Bilgi Sistemi
Internet Tabanli Yildiz Teknik Universitesi Bilgi SistemiInternet Tabanli Yildiz Teknik Universitesi Bilgi Sistemi
Internet Tabanli Yildiz Teknik Universitesi Bilgi Sistemicemera
 
C sharp-ornegi
C sharp-ornegiC sharp-ornegi
C sharp-ornegisersld30
 
Programlama Dilleri Tanıtım
Programlama Dilleri TanıtımProgramlama Dilleri Tanıtım
Programlama Dilleri TanıtımAtilla Özgür
 
C sharp-teknigi
C sharp-teknigiC sharp-teknigi
C sharp-teknigisersld30
 
C sharp-indir
C sharp-indirC sharp-indir
C sharp-indirsersld30
 
C sharp-tasarimi
C sharp-tasarimiC sharp-tasarimi
C sharp-tasarimisersld30
 

Similaire à C# Akademi 2005 (20)

delphi
delphidelphi
delphi
 
14
1414
14
 
delphi xe5
delphi xe5 delphi xe5
delphi xe5
 
Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008
 
C sharp-dokumani
C sharp-dokumaniC sharp-dokumani
C sharp-dokumani
 
RPC Zafiyetlerinin Keşfi
RPC Zafiyetlerinin KeşfiRPC Zafiyetlerinin Keşfi
RPC Zafiyetlerinin Keşfi
 
C sharp-ornek
C sharp-ornekC sharp-ornek
C sharp-ornek
 
C# 4.0 new features - innova
C# 4.0   new features - innovaC# 4.0   new features - innova
C# 4.0 new features - innova
 
Bilgisayar Mimarisi 06, Feza BUZLUCA
Bilgisayar Mimarisi 06, Feza BUZLUCABilgisayar Mimarisi 06, Feza BUZLUCA
Bilgisayar Mimarisi 06, Feza BUZLUCA
 
C sharp-egitim-cd-si
C sharp-egitim-cd-siC sharp-egitim-cd-si
C sharp-egitim-cd-si
 
Kütüphanelerde Web Sitesi Hazırlama ve Uygulama Semineri (FrontPage)
Kütüphanelerde Web Sitesi Hazırlama ve Uygulama Semineri (FrontPage)Kütüphanelerde Web Sitesi Hazırlama ve Uygulama Semineri (FrontPage)
Kütüphanelerde Web Sitesi Hazırlama ve Uygulama Semineri (FrontPage)
 
C sharp-ornekleri
C sharp-ornekleriC sharp-ornekleri
C sharp-ornekleri
 
Aspnet temelleri
Aspnet temelleriAspnet temelleri
Aspnet temelleri
 
Internet Tabanli Yildiz Teknik Universitesi Bilgi Sistemi
Internet Tabanli Yildiz Teknik Universitesi Bilgi SistemiInternet Tabanli Yildiz Teknik Universitesi Bilgi Sistemi
Internet Tabanli Yildiz Teknik Universitesi Bilgi Sistemi
 
yazılımmuh10.pptx
yazılımmuh10.pptxyazılımmuh10.pptx
yazılımmuh10.pptx
 
C sharp-ornegi
C sharp-ornegiC sharp-ornegi
C sharp-ornegi
 
Programlama Dilleri Tanıtım
Programlama Dilleri TanıtımProgramlama Dilleri Tanıtım
Programlama Dilleri Tanıtım
 
C sharp-teknigi
C sharp-teknigiC sharp-teknigi
C sharp-teknigi
 
C sharp-indir
C sharp-indirC sharp-indir
C sharp-indir
 
C sharp-tasarimi
C sharp-tasarimiC sharp-tasarimi
C sharp-tasarimi
 

Plus de Burak Selim Şenyurt

Monolitik Uygulamalarda Teknik Borçlanma ile Mücadele (Teori)
Monolitik Uygulamalarda Teknik Borçlanma ile Mücadele (Teori)Monolitik Uygulamalarda Teknik Borçlanma ile Mücadele (Teori)
Monolitik Uygulamalarda Teknik Borçlanma ile Mücadele (Teori)Burak Selim Şenyurt
 
Beş Dakikalik Yolu Bir Saatte Gitmek - Bir AntiPattern Macerası
Beş Dakikalik Yolu Bir Saatte Gitmek - Bir AntiPattern MacerasıBeş Dakikalik Yolu Bir Saatte Gitmek - Bir AntiPattern Macerası
Beş Dakikalik Yolu Bir Saatte Gitmek - Bir AntiPattern MacerasıBurak Selim Şenyurt
 
Monolitik Yapılarda Teknik Borçlardan Kurtulmak
Monolitik Yapılarda Teknik Borçlardan KurtulmakMonolitik Yapılarda Teknik Borçlardan Kurtulmak
Monolitik Yapılarda Teknik Borçlardan KurtulmakBurak Selim Şenyurt
 
Bugün Yarınların için Ne Yapacaksın?
Bugün Yarınların için Ne Yapacaksın?Bugün Yarınların için Ne Yapacaksın?
Bugün Yarınların için Ne Yapacaksın?Burak Selim Şenyurt
 
Yazılımda Sağlam Adımlar Atmak
Yazılımda Sağlam Adımlar AtmakYazılımda Sağlam Adımlar Atmak
Yazılımda Sağlam Adımlar AtmakBurak Selim Şenyurt
 
Finans Sektöründe Verimli Yazılımcı Olabilmek
Finans Sektöründe Verimli Yazılımcı OlabilmekFinans Sektöründe Verimli Yazılımcı Olabilmek
Finans Sektöründe Verimli Yazılımcı OlabilmekBurak Selim Şenyurt
 

Plus de Burak Selim Şenyurt (20)

Monolitik Uygulamalarda Teknik Borçlanma ile Mücadele (Teori)
Monolitik Uygulamalarda Teknik Borçlanma ile Mücadele (Teori)Monolitik Uygulamalarda Teknik Borçlanma ile Mücadele (Teori)
Monolitik Uygulamalarda Teknik Borçlanma ile Mücadele (Teori)
 
Beş Dakikalik Yolu Bir Saatte Gitmek - Bir AntiPattern Macerası
Beş Dakikalik Yolu Bir Saatte Gitmek - Bir AntiPattern MacerasıBeş Dakikalik Yolu Bir Saatte Gitmek - Bir AntiPattern Macerası
Beş Dakikalik Yolu Bir Saatte Gitmek - Bir AntiPattern Macerası
 
Monolitik Yapılarda Teknik Borçlardan Kurtulmak
Monolitik Yapılarda Teknik Borçlardan KurtulmakMonolitik Yapılarda Teknik Borçlardan Kurtulmak
Monolitik Yapılarda Teknik Borçlardan Kurtulmak
 
Bugün Yarınların için Ne Yapacaksın?
Bugün Yarınların için Ne Yapacaksın?Bugün Yarınların için Ne Yapacaksın?
Bugün Yarınların için Ne Yapacaksın?
 
Kaosu Körüklemek
Kaosu KörüklemekKaosu Körüklemek
Kaosu Körüklemek
 
Yazılımda Sağlam Adımlar Atmak
Yazılımda Sağlam Adımlar AtmakYazılımda Sağlam Adımlar Atmak
Yazılımda Sağlam Adımlar Atmak
 
SOA Gerçekleri
SOA GerçekleriSOA Gerçekleri
SOA Gerçekleri
 
Finans Sektöründe Verimli Yazılımcı Olabilmek
Finans Sektöründe Verimli Yazılımcı OlabilmekFinans Sektöründe Verimli Yazılımcı Olabilmek
Finans Sektöründe Verimli Yazılımcı Olabilmek
 
Enterprise Applications
Enterprise ApplicationsEnterprise Applications
Enterprise Applications
 
NoSQL - Yazılımcı Bakışıyla
NoSQL - Yazılımcı BakışıylaNoSQL - Yazılımcı Bakışıyla
NoSQL - Yazılımcı Bakışıyla
 
Gizli Tehlike : AntiPatterns
Gizli Tehlike : AntiPatternsGizli Tehlike : AntiPatterns
Gizli Tehlike : AntiPatterns
 
Anti-Patterns
Anti-PatternsAnti-Patterns
Anti-Patterns
 
Netron Techweek 2007 WCF
Netron Techweek 2007 WCFNetron Techweek 2007 WCF
Netron Techweek 2007 WCF
 
Yazilim Zirvesi 2008
Yazilim Zirvesi 2008Yazilim Zirvesi 2008
Yazilim Zirvesi 2008
 
Ready to Rock
Ready to RockReady to Rock
Ready to Rock
 
Bankacılık ve SOA
Bankacılık ve SOABankacılık ve SOA
Bankacılık ve SOA
 
Trakya Üniversitesi Workshop
Trakya Üniversitesi WorkshopTrakya Üniversitesi Workshop
Trakya Üniversitesi Workshop
 
Kariyerini Çiz
Kariyerini ÇizKariyerini Çiz
Kariyerini Çiz
 
Geleceğin Programıcısı
Geleceğin ProgramıcısıGeleceğin Programıcısı
Geleceğin Programıcısı
 
Tfs ile duzenli proje gelistirme
Tfs ile duzenli proje gelistirmeTfs ile duzenli proje gelistirme
Tfs ile duzenli proje gelistirme
 

C# Akademi 2005

  • 1. .NET Framework ve C#’a Giriş C# Akademi (http://www.csharpnedir.com) 1
  • 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. 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. 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. .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. 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. .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. .NET Framework Bileşenleri İki ana bileşen  FCL – Framework Class Library  CLR – Common Language Runtime (http://www.csharpnedir.com) 8
  • 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. CLR : Çalışma Modeli Kaynak VB C# C++ kod Yönetilmeyen Derleyici Derleyici Derleyici Bileşenler Ara Assembly Assembly Assembly IL Kodu IL Kodu IL Kodu kod CLR - Common Language Runtime JIT Derleyicis Doğal(Native) Kod İşletim Sistemi Servisleri (http://www.csharpnedir.com) 10
  • 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 Makine Uygulama CLR JIT Kodu METADATA (http://www.csharpnedir.com) 11
  • 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. Bazı kütüphaneler Namespace(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. 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. 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. Çö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. 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. C# tipi Boyut .NET tipi Aralık Tü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. CLS - Common Language Specification Ortak 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. 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. 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. 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. Assembly Yükleme  Strongly Named Assemblies (Public Assembly) (GAC Kurulumu)  Private Assemblies (XCOPY Kurulum)  Tek farkı kurulumla ilgilidir. (http://www.csharpnedir.com) 23
  • 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. Private Assemblies  Tekil ID yok  Uygulama dizininde bulunur  XCOPY kurulumu yapılabilir. Uygulama ile taşınmalıdır. (http://www.csharpnedir.com) 25
  • 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. 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. 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. Merhaba Dünya Class ilk_program1 { static void Main() { System.Console.WriteLine(“Merhaba Dünya”); } } (http://www.csharpnedir.com) 29
  • 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. Merhaba Dünya Bir 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. Merhaba Dünya Bir 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. Merhaba Dünya using 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. 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. 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. Bellek Alanları Stack Heap Register Static Constant Ram Olmayan Bölge (http://www.csharpnedir.com) 36
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Değer ve Referans Türleri (http://www.csharpnedir.com) 47
  • 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. 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. Değer Türleri Veri CTS Karşılığı Açıklama Max Min Tipi sbyte System.Byte 8 bit işaretli tamsayı -128 127 short System.Int16 16 bit işaretli tamsayı -32.768 32.767 int System.Int32 32 bit işaretli tamsayı -2.147.483.648 2.147.483.647 long System.Int64 64 bit işaretli tamsayı -9.223.372.036.854.775.808 9.223.372.036.854. 775.807 byte System.Byte 8 bit işaretsiz tamsayı 0 255 ushort System.UInt16 16 bit işaretsiz tamsayı 0 65.535 uint System.UInt32 32 bit işaretsiz tamsayı 0 4.294.967.295 ulong System.UInt64 64 bit işaretsiz tamsayı 0 18.446.744.073.70 9.551.615 float System.Single 32 bit tek kayan sayı +/- 1,5 x 10^-45 +/- 3,4 x 10^38 double System.Double 64 bit çift kayan sayı +/- 5 x 10^-324 +/- 1,7 x 10^-308 decimal System.Decimal 128 bit ondalıklı sayı +/- 1,5 x 10^-28 +/- 7,9 x 10^28 bool System.Boolea Doğru yada yanlış true / false n char System.Char Karakterleri temsil eder 16- Unicode Karakterleri (http://www.csharpnedir.com) 50
  • 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. 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ır Küçük Tür Büyük Tür Küçük Tür Büyük Tür (http://www.csharpnedir.com) 52
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Operatörlerin Sınıflandırılması (), [], ++, --, +, -, ~, new, checked, Unary unchecked, typeof, sizeof *, /, %, +, -, <, <=, >, >=, as, is, <<, Yapılarına Göre >>, ==, !=, &, ^, |, &&, ||, =, *=, /=, Binary Sınıflandırma +=, -=, <<=, >>=, &=, ^=, |= ?: Ternary Aritmetik (Arithmetic) +, -, *, /, %, ++, -- Karşılaştırma >, <, >=, <=, ==, !=, as, is (Comparison) Mantıksal (Logical) ||, &&, ! İşlvelerine Göre Sı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. Operatör Önceliği Öncelik Operatör Birincil Öncelik x.Y(nesne erişim operatörü), f(x), dizi[x], x++, x--, new, typeof, checked, unchecked Unary 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, as Eş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. Aritmetik Operatörler Toplama 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. 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. Aritmetik Operatörler ++ Arttırma ve -- Azaltma int a=10; int b; int c; b=a++; İlk önce atama b=10 Sonra arttırma a=11 c=++a; Önce arttırma a=12 Sonra atama c=12 (http://www.csharpnedir.com) 68
  • 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. Karşılaştırma Operatörleri Sonuçlar bool veri tipinden true veya false olur Büyüktür > ve Küçüktür < bool b1 = 45 > 40; true bool b2 = 40 < 30; false Büyüktür eşittir >= ve Küçüktür Eşittir <= ; bool b1 = 50 <= 50; true bool b2 = 50 >= 45; true Eşittir == ve Eşit Değildir != ; bool b1 = 50 = 48; false bool b2 = 50 != 48; true (http://www.csharpnedir.com) 70
  • 71. Karşılaştırma Operatörleri as 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. Mantıksal Operatörler VE && 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 false bool b1 = 10 < 20 && 10 == 10; true (http://www.csharpnedir.com) 72
  • 73. Mantıksal Operatörler VEYA || Operatörü; 1nci Operand İkinci Operand Sonuç true true true true false true false true true false false false Operandlardan en az birisi true ise true döner. bool b1 = 10 < 20 || 10 == 50; true || false true bool b1 = 10 > 20 && 10 == 11; false (http://www.csharpnedir.com) 73
  • 74. Mantıksal Operatörler DEĞİL ! Operatörü; Operand Sonuç true false false true Operandın mantıksal değilini verir. bool b1 = ! (10 < 20) ; ! true false (http://www.csharpnedir.com) 74
  • 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. Bitsel Operatörler Bİ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. Bitsel Operatörler Bİ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. Bitsel Operatörler Bİ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. Bitsel Operatörler Bİ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. Bitsel Operatörler Bİ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. Bitsel Operatörler BİTSEL ÖZEL VEYA ^ Operatörü; Özel veya geri dönüşümlü işlem yapar. Bir sayıyı özel veya işlemine tabi tuttuktan sonra aynı sayı ile tekrar özel veya işlemine tabi tutmak baş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. Bitsel Operatörler Bİ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; 00001010 byte 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. Bitsel Operatörler Bİ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; 10001001 byte 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. Atama ve İşlemli Atama Operatö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. Ö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. Ö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=new new 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. 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. Deyim ve İfade Deyim(statement) Örneği a = (a << b) + c; İfade(expression) Örneği a = (a << b) + c (http://www.csharpnedir.com) 88
  • 89. if-else Karar Verme Yapısı Akış diyagramı (http://www.csharpnedir.com) 89
  • 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. 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. 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. İçiçe if-else Blokları Gerçek hayatta en çok kullanılan biçim if (kosul1) { if (kosul2) deyim1 else { deyim2 deyim3 } } else deyim4 Okunabilirlik açısından süslü parantez kullanmak gerekir. (http://www.csharpnedir.com) 93
  • 94. Tehlikeli Durum - 1 Gö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. Tehlikeli Durum - 2 int 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. Koşul Operatörü (?:) Kısa if – else blokları yerine kullanılabilir. ?: Operatörü İfade 1 ? İfade 2 : ifade 3 Yanlış Karar Test Koşulu (bool) Doğru Karar (http://www.csharpnedir.com) 96
  • 97. switch-case Koşul İfadesi Kompleks 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. Ö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. switch-case Koşul İfadesi Ortak case ifadeleri int 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. Ö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. 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. Döngüler (Loops) Profesyonel uygulama geliştirmeye ilk adım Döngüler bir yada daha fazla deyimin belirli bir koşul sağ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. for Döngüleri for (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. for döngüsü Animasyonu donguler_flash_for.swf (http://www.csharpnedir.com) 104
  • 105. Farklı kullanımlar char 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. Sonsuz döngüler(!) int k = 0; for (;;) { Console.WriteLine(k); ++k; } (http://www.csharpnedir.com) 106
  • 107. Örnek 1’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. 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. while Döngüleri while(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. while Döngüleri while (--n>=0) { // Bu döngü size neyi ifade ediyor? } while döngü yapısını kullanarak 1’den 100’e kadar olan çift sayıların toplamını bulan programı yazınız? Kitaplar kapalı ! (http://www.csharpnedir.com) 110
  • 111. do while Döngüleri do do deyim { while(koşul); deyim1 deyim2 while(koşul); } deyim while(koşul); do while döngülerinde döngü bloğundaki deyimler en az bir kez çalıştırılırlar. (http://www.csharpnedir.com) 111
  • 112. do while – Klasik Kullanım do { Console.Write("Şifreyi giriniz :"); yazi = Console.ReadLine(); }while (yazi != "sifre");); while döngüsünden tek farkı döngü koşulunun bulunduğu yerdir. (http://www.csharpnedir.com) 112
  • 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 read only özelliğine sahiptir. Bu nedenle elle içeriği değiştirilemez. (http://www.csharpnedir.com) 113
  • 114. Atlama(Jump) Deyimleri  break deyimi  continue deyimi  return deyimi  goto deyimi (!) Atlama deyimi ile ilgili örnekler. (http://www.csharpnedir.com) 114
  • 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. 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. Dizi değişkenleri tanımlama int[] 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 bir program ile gösterelim. Varsayılan değer her veri tipi için farklı olacağını unutmamak gerekir. (http://www.csharpnedir.com) 117
  • 118. Diğer bir dizi tanımlama biçimi string[] dizi1 = {"Bir","İki","Üç"}; int[] dizi2 = {1,2,3}; 3 elemanlı diziler float[] 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 bir program 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. foreach döngüsü ve diziler Foreach döngü yapısı diziler gibi birden fazla eleman içeren yapı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. Çok boyutlu diziler Her bir elemanı yine bir dizi olan dizi çeşitlerine çok boyutlu dizi denir.  Matris dizileri  Düzensiz(Jagged) diziler (http://www.csharpnedir.com) 120
  • 121. Matris Dizileri 3X2 boyutlu matris dizisi : 3 satır sayısı, 2 sütun sayısı int[,] dizi = {{1,2},{3,4},{5,6}}; dizi[0,0] = 1 dizi[0,1] = 2 dizi[1,0] = 3 dizi[1,1] = 4 dizi[2,0] = 5 dizi[2,1] = 6 3X4 Matrisi (http://www.csharpnedir.com) 121
  • 122. Matris Dizileri Matris 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. Matris Dizileri Elemanlarına Erişim Örnek program inceleme (http://www.csharpnedir.com) 123
  • 124. Düzensiz(jagged) Diziler Her 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. Düzensiz(jagged) Diziler Dü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. 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. CreateInstance() Metodu 1-) CreateInstance(Type, int, int, int); Bu metod ile parametre ile verilen eleman sayılarda Type türünden 3 boyutlu diziler oluşturulur. 2-) CreateInstance(Type, int); Type türünden int ile verilen sayı kadar elemanı 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 int türden bir dizi metoda parametre olarak gönderilir. 4-) CreateInstance(Type, int, int); Parametre olarak verilen boyutlarda iki boyutlu dizi nesnesi oluşturur. Bu şekilde oluşturulan dizilerin elemanlarına nasıl ulaşırız? (http://www.csharpnedir.com) 127
  • 128. Temel dizi işlemleri 1-) 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. Örnek Herhangi bir türden dizinin elemanlarını Array sınıfının Reverse() metodunu kullanmadan ters çeviren bir program yazı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. 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. Bir Metodun Genel Yapısı Metod Gövdesi Parametreler •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. 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. 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. 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. Metodlar  Aşağıdaki kod neden çalışmaz? ? static void Yaz(int a,int b) { return a+b; } (http://www.csharpnedir.com) 135
  • 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. 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. 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. Metodlar  Aşağıdaki kod neden çalışmaz? ? static void Yaz(int a,int b) { int a; } (http://www.csharpnedir.com) 139
  • 140. Metodlar  Verilen iki sayının en büyüğünü bulan bir metod. ? (http://www.csharpnedir.com) 140
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. Metodların Aşırı Yüklenmesi Metod İ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. 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. 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. 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. Özyinelemeli (Recursive) Metodlar  Metod gövdesinden kendisini çağıran metodlara denir. (http://www.csharpnedir.com) 154
  • 155. Özyinelemeli (Recursive) Metodlar Faktö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. 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. 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. 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. 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. 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. Uygulama - Fibonacci static 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. 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. 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. Sınıf Nesneleri Tanımlama class KrediHesabi { Bir sınıf nesnesi oluşturmak Sı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. Sınıf Üyelerinde Erişim Belirleyicilerin Rolü class KrediHesabi { Sınıf private ulong HesapNo; Bu üyelere, private oldukları için Tanı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. Sınıf Nesneleri Arası Atama class 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. 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. Sınıf Nesneleri Arası Atama hesap2 = hesap1 ; Stack Heap hesap1 @ hesap2 HesapNo @ Limit Kart Sahibi (http://www.csharpnedir.com) 168
  • 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. 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. 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. Özellik Tanımlama Özellikler, sınıf içi alanların, dış ortamdan saklanması bir başka deyişle kapsüllenerek erişimlerinin kontrol altına alınmasını sağlar. (http://www.csharpnedir.com) 172
  • 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. Ö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. 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. 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. Yapıcı Metodlar ( Constructors ) Yapıcı metodların geri dönüş değeri yoktur. Geri dönüş değerinin olmaması metodun class Zaman Yapıcı metodların ismi void 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. 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. 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. 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. 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. Yapıcı Metodların Aşırı Yüklenmesi class 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. 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. Yapıcı Metodlar ?  Bir nesneyi, başka bir nesneden nasıl örneklendirebiliriz ? (http://www.csharpnedir.com) 184
  • 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. 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. 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. Yıkıcı Metodlar class 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. 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. 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. Static Yapıcı Metodlar Static yapıcılar, bir sınıfın static değişkenleri ile ilgili iş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 ile yapıcı oluşturursak oluşturalım, static metod } yapıcı metod ilk nesne } yaratıldığında bir kez çalıştırılır. (http://www.csharpnedir.com) 191
  • 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
  • 193. Üçü bir arada. int a; ?  Bu kodun ekran çıktısı ne olur? public static void Metod() { a=Convert.ToInt32(Console.ReadLine()); int b=a/2; Console.WriteLine(b.ToString()); } [STAThread] static void Main(string[] args) { Metod(); } (http://www.csharpnedir.com) 193
  • 194. Üçü bir arada. class Oyuncu { public static int Toplam; public Oyuncu() { Oyuncu.Toplam++; Varsayılan yapıcı } static Oyuncu() { Toplam=0; static yapıcı } ~Oyuncu() { Toplam--; yıkıcı } } (http://www.csharpnedir.com) 194
  • 195. Üçü bir arada. class AnaSinif { ?  Bu kod nasıl çalışır? static void Main() { Oyuncu o = new Oyuncu ( ) ; Console.WriteLine ( Oyuncu . Toplam ) ; Oyuncu x = new Oyuncu ( ) ; } } (http://www.csharpnedir.com) 195
  • 196. Const Elemanlar  Programın çalışması sırasında değerinin değişmeyeceği düşünülen değişkenler, sabit olarak tanımlanır. public const double PI = 3.14 ; sabitlere mutlaka ilk değer verilmelidir. sabitler const anahtar kelimesi ile tanımlanır. Console.WriteLine ( Cebir . PI ) ; sabitlere nesneler üzerinden değil sınıf nokta notasyonu ile erişilebilir.  Sabit ifadeleri çalışma zamanında değiştirilemez. (http://www.csharpnedir.com) 196
  • 197. Const Elemanlar  Sabitler referans tiplerine uygulanamaz.  İstisnai bir durum olabilir mi? ?  Sabitler referans tiplerinden sadece string türlerine new anahtar sözcüğü kullanılmadığı takdirde uygulanabilir. Bir sınıfa veya başka bir referans tipine uygulanamaz public const string a = “ Burak “ ; (http://www.csharpnedir.com) 197
  • 198. ReadOnly Elemanlar  ReadOnly elemanlar, referans tiplerini sabit olarak tanımlamak istediğimiz durumlarda kullanılır.  Readonly elemanların değerleri çalışma zamanında yada derleme aşamasında değiştirilemez. static readonly Deneme a = new Deneme ( ) ; Sabitler ile readonly elemanlar arasındaki tek fark, sabitler için ilk değer verilmesinin derleme zamanında, readonly elemanlar içinse çalışma zamanıda yapılmasıdır. (http://www.csharpnedir.com) 198