7 Kasım 2014 Cuma

C# Destructor Nedir

Bugün  işleyeceğimiz konu Destructor(yıkıcı-yok edici) metot; 
konu içeriğimizin başlıkları şu şekilde olacak;
  1. Destructor nedir
  2. Söz Dizimi
  3. Destructor Özellikleri
  4. Destructor Örnek Uygulama

Destructor Nedir

 
Daha önceki yazılarımızda constructor (kurucu metotlardan bahsetmiştik) ilgili yazıya buradan ulaşabilirsiniz.Destructor (yıkıcı metot) olarak isimlendirelibilir.c# içinde bizim tanımladığımız sınıflar yada framework ile birlikte gelen yerleşik sınıfları hafızaya çıkarıp birer nesne oluşturduğumuz vakit hafızadan  silimeden hemen önce çalışan metotlardır. Destructor çağırılabilir bir metot değildir ve genel olarak bu işlemi  garbage collector denilen mekanizma  program içinde kendisi otomatik yapmaktadır. Bizim blok içinde kullanmış olduğumuz nesne yada değişkenler normal şartlarda blok sonuna gelindiğinde kapanan süslü parantez ile birlikte bellekten otomatik olarak düşerler . Sınıflar ve GC ise farklı davranış gösterirler şöyleki ; sınıflar heapta yer işgal ettiklerinden çöp toplayıcı mekanizma olan garbage collector sınıfın kullanılmadığı bir anda nesneyi kendisi otomatik temizlemektedir. Hangi sınıfın kullanılmadığına kendi içinde tutmuş olduğu sayaça bakarak karar verir  , uygun olanı siler belleği boşaltır. Bunu yapma nedeni heapta boş alanı belleğe kazandırmak içindir. Destructordan farklı olarak GC sınıfı çağırılabilir.Bazı durumlarda biz GC sınıfını çağırıp kendimiz bu temizleme işlemini yapmak istesekte GC nin bu çağrıya cevap verme süresi tam kestirilemez, genelde programları kapatırken otomatik olarak devreye girer, Şimdi Destructor söz dizimini görelim sonrasında yapacağımız bir  örnek ile konuyu biraz daha netliğe kavuşturalım

Destructor Söz Dizimi


Constructor söz Diziminden  tek farkı başına erişim belirleyicisi almaması ve tilde ~ işaretinin gelmesidir
    

 ~ MyClass()

  {
    
    buraya kodlarımızı yazarız.

   }

 

Destructor Özellikleri 



Maddeler halinde ifade edilecek olursa:
  1. Destructor metodlar çağırılamazlar  
  2.  Çağırılamadığı için aşırı yükleme hali yoktur.Overload edilemezler
  3.  Erişim belirleyicisi yoktur.
  4. Destructorlar  bir sınıf için sadece bir tane bulunur
  5. Kalıtımları yoktur miras alınamazlar
  6. Struct(yapı)larda destructor olmaz classlarda olur.

 

Destructor Örnek


visual studioda bir windows formu açalım ismine Destructor adı verelim ve formumuza  3 tane button ekleyerek text değerlerini aşağıdaki gibi girelim.




kod tarafına geçerek  orada bir class oluşturalım




classımızın içide bu şekilde şimdi butonların altına yazdığımız kodları  görelim
birinci buton sınıfı kurarken  ikincisi sınıfı silen garbage collector sınıfının metodunu çağırıyor ,üçüncüsü ise formu kapatıyor. Şimdi buton button1'e basıp sınıfı kurduğumuzda yapıcı metot çalışacak ve bizim karşımıza şöyle bir ekran gelecek.



sınıf kuruldu ve bizde mesajımızı görmüş olduk,programı kapat butonuna basarsak ekrana  bu sefer  "yine bekleriz.güle güle" mesajı gelir. Burada tuhaf gibi gelen durum şudur ki programı kapat butonun altında sadece this.Close(); metodu var ama biz programı kapatınca mesajı almış olduk ,bunun nedeni program kapanırken  sınıfında bellekten temizleniyorolması yani   ile destructor metodunun içindeki kodun çalışıyor ol masıdır, aşağıdaki resimde nesne temizlendikten sonraki  mesaj kutusunu görüyoruz



programı baştan çalıştırıp tekrar birinci butona basıp ilk mesajı aldıktan sonra  misafirleri yolcu et butonuna basarsak  tekrar "yine bekleriz.güle güle"mesajı gelir ama bu sefer programı kapat butonuna bastığımızda hiç bir mesaj almadan program sonlanmış olur. Birden fazla sınıflarla çalıştığımızda GC ile nesneleri bellekten temizlemek iyi bir yöntemdir. Evet bir makalenin daha sonuna geldik ,baska bir yazıda görüşünceye kadar sağlıcakla kalın.

2 Kasım 2014 Pazar

C# Struct(Yapı) Kavramı

Yeni bir ayda tekrar birlikteyiz, struct(yapı) konusunu ele alacağım bu yazıda içeriğimiz altta görmüş olduğunuz alt başlıklar şeklinde olacak
  • struct nedir
  • struct bildirimi nasıl yapılır
  • new anahtarı kullanımı

 

struct nedir


struct türkçeye çevirdiğimiz vakit  kelime karşılığı  olarak yapı anlamına gelmektedir. Bizde konunun  devamında yapı kelimesini kullanacağız. Yapı dediğimiz  bu kavram  c# içinde bir nesneyi temsil eden veri tipidir.örneğin sayısal bir tip olan int,short,byte vs.. birer yapıdır. Yapılar birer nesne olduğu için belli özelliklere sahiptirler bu özellik dışında alan (field-degişken) ve metotlara(yöntem-iş-parçası)sahip olabilirler.Claslara çok benzemesine   karşın aralarında bariz farklar vardır yapılar değer tiplidir,classlar ise reference tiplerdir.Bu konuya buradan göz atabilirsiniz.Değer tipleri bellekte stack alanında iken reference tip olan classlar heap(öbekte) tutulurlar.Classlar new anahtar kelimesi ile yaşam bulup belleğe çıkarlar.yapılar ise  iki kullanımada açıktır


struct bildirimi nasıl yapılır


yapıları oluşturuken sınıf bildiriminden  farklı bir şeyler yapmayız.Class kelimesi yerine struct kullanılır,ayrıca bir class içinde oluşabilir yada terside mümkündür bir yapı içinde classta olabilir fakat bir metot içinde yapı oluşturamazsınız.


<Erişim belirteci> struct <struct ismi>
{
 // kod bloğumuz burada özellik,degişken ,metot tanımlayabileceğimiz yapı bileşenleri..

}

şimdi  bu tanıma ait küçük bir kod bloğunu aşağıda gösterelim

public  struct  kitaplar
{

public string kitapAdi;
public int  kitapFiyati;

}

 yapıları programımızın kodu içinde kullanmayı görelim

 

new anahtarı ile yapı kullanımı


new c# de bellekte yeni bir nesne oluşurmak için kullanılan deyimdir.Burada nesnemiz yapı olacağı için stackte yeni bir nesne ortaya çıkacaktır, yukarıda oluşturduğumuz yapıyı  Form1_load eventinde gözlemleyelim

 private void Form1_Load(object sender, EventArgs e)
        {
           

        kitaplar yenikitap=new kitaplar();
        yenikitap.kitapAdi = "Hayat Güzeldir";
        yenikitap.kitapFiyati = 32;


       }


Bir yapıyı new olmadanda kullanabiliriz


 private void Form1_Load(object sender, EventArgs e)
        {
           

        kitaplar yenikitap;
        yenikitap.kitapAdi = "Hayat Güzeldir";
        yenikitap.kitapFiyati = 32;


       }

bu şekildeki kullanımdada yenikitap değişkenini yazıp noktaya(.) basarsanız kitap nesnemizin fieldlerine ulaşabildiğimizi görürüz peki new kullanımı ne fark yaratıyor,
farkı şu ki new ile kullanınca yenikitap.kitapAdi=null değerini  yenikitap.kitapFiyati =0; değerini otomatik olarak almış olur.kodumuzu aşağıdaki şekle getirelim



       
         private void Form1_Load(object sender, EventArgs e)
        {
       


            kitaplar yenikitap= new kitaplar();
                  
            this.Text = yenikitap.kitapAdi;
       
       
        }
 



formun başlığı boş gelecektir.eğer new anahtar kelimesini kullanmadan yazmaya kalkışırsak bu sefer değişkenlere ulaşabilsekte  başlangıç değeri vermediğimiz için hata almış olacagız.sınıflar new anahtarı olmadan  belleğe çıkamazlar new ile  sınıf  üyeleri varsayılan değerlerini alırlar  yapılar ise new  yoksa üyelerine ulaşabilsekte  başlangıç değeri atanma zorunluluğu vardır. bir sonraki yazıda görüşmek dileğiyle..




27 Ekim 2014 Pazartesi

c# değer tipleri ve reference tipler

c# da  verileri işlerken  genel olarak önceden tanımlı  tipleri(int,string,bool, decimal vs..) yada kendi yazdığımız sınıfları kullanırız  her tip kendine has belli formatları kuralları içinde saklarken bellekte  işgal ettikleri alanlarda da farklılıklar gösterirler.Bugün  değer ve referans  tipleri  ram'da nasıl davranışlar gösterir buna bakıyor olacağız.

Değer Tipleri(value types)

bu tür tipler bellek bölgesinde stack alanını kullanırlar.stack  bölgesi değişken ismi ile birlikte o değişkenin taşıdğı değeri burada saklar.
mesala  bir sayıyı hafızada tutmak istediğimizi   varsayalım genelde bunu 
int sayi=atayacağımız değer seklinde kullanırız.

burada resimde yazılı alanların bulunduğu kısımda byte tipinden yas değişkeni tanımlanıyor ve ona 25 sayısı atanıyor stack alanında bulunan değişkenimiz nesnenin kendi degerini taşıyor.değer tiplerinde eşitlemeler atamalar yapılırken her bir degişken ayrı bir nesne olarak ele alınır örneğin
  int sayi=5;
  int sayi2=sayi;
 sayi=10;
 MessageBox.Show(sayi2.TosString());

burada 2 farklı değişken vardır ve sayi2 isimli değişken sayi isimli değişkenin değerini almaktadır yani oda 5e eşitlenmistir.sonraki satırda sayi değeri 10 olmuştur msgboxla sayi2 degerini aldığımızda ilk atamıs oldugumuz 5 degerini görmus oluruz. aşagıda reference tiplerinde durumun böyle olmadığını göreceğiz. şimdi temel veri tipleri ile ilgili bir kaç sey daha söylemek gerekecek.

c# içinde on beş temel veri tipimiz var  ve bunları  beş  bölume ayırabiliriz , hızlıca göz atalım ;

tam sayı tipleri :
byte,sbyte,short ,ushort,int,uint,long ve ulong ( 8 adet tam sayı tipi)
ondalıklı sayı tipleri :
float,decimal,double (3 adet ondalıklı tip)
Doğru yada yalnışı döndüren tip :
Boolean
Metin tipleri :
char ve string (2 adet)
nesne(her şey) tipi :
object ile her türlü  veri tipini taşıyabilirsiniz.


string ve object hariç diğer bütün tipler value type(değer tipi) olarak işleme konulurlar.string bir sınıf ve reference tipi olmsına karşılık yinede struct(yapı) yani değer tipi gibi davranıs gösterir.değişkenleri sınıf gövdesinde tanımlarsak field(alan)ismini alırken bir metot ,event vs sinif harici bloklar içinde tanımlarsak lokal değişken olurlar. sınıf gövdesinde tanımladığımız tipler  biz onlara değer ataması yapmasakta otomatik olarak varsayılan değerini alırlar.tam sayi tipleri için varsayılan değer 0 ken  boolean tip icin false  string ve object veri tipi için null dur.lokal degişkenlere (yani metot içi) başlangıç değeri verilmezse  o sekilde kalmasında sorun olmasada o değişkeni bir yerde kullanmaya çalışırsak derleyici tarafından programımız çalışmadan kırılacaktır.
değer tipleri önceden tanımlı olarak bellekte stack alanında yer aldıkları  için boyutları ve kapladıkları alanlar bellidir.int 4 byte yer kaplarken  long 8 byte dir veya short 2 byte gibi visual studioda tasarım esnasında programı uygulamaya geçireceğimiz zaman bellekte bu tiplerin ne kadar alan işgal edecekleri bellidir.reference tiplerde bu belli olmaz bunun açıklamasına birazdan bakmakla birlikte stack alanının heap alanına göre daha performanslı oldugunu  söylemeliyim


Referans Tipleri(reference types)

reference tipler new anahtar kelimesi ile  hayat bulurlar sadece veri tipini ve degişken ismini yazarsak  reference tiplere new anahtar kelimesini kullanmaz isek o değişken null olarak kalır.örnekte bunu göreceğiz gelelim  ihtiyaç duymamızın nedenine   sebebi , bu tipi kullanan veri tiplerinin boyutlarının önceden belli olmamasıdır.evet stack alanı hızlı ve performanslıdır ama sınırları vardır.object ve string tiplerin değer tipli olmadğını söyledik.sözü uzatmadan neden bu tipe ihtiyaç duyarız ona bakalım. studioda görsel arayüzü olan bir winform tasarımı yazdığınızı düsünelim bu bir veri tabanı uygulaması yada basit bir program olsun. Ara yüzde textboxlar kullandığımızı düşünelim (bilindiği gibi  textboxların sunduğu ve taşıdığı veriler string dir.)kullanıcıdan kisişel verilerini istedigimizde isimlerden tutunda ev adresi  size sunduğu iş deneyimi(cv vs..) boyutları önceden bilenemez .işte bu yuzden onceden boyutunu tahmin edemeyeceğimiz veriler için bu türleri kullanırız.class ve dizilerde reference tiplidir. bu türü temsilen tanımladığımız değişken bellegin stack adresinde dururken içerdiği değer heap alanındadır. stacteki değişkenimiz zaten refakatcidir ve sadece o değerin  adresine işaret eder şekil ile şematize etmek istersek




burada kullandığımız veri tipi stringtir ad isimli değişken  ramda stack(yığında)  durur fakat  ad isimli değişkenimiz içinde "sanalprogramalama" değerini taşımaz   sadece hafızada değer nerede bulunuyorsa o adres bilgisini kendinde tutar yani temsili olan 0f123h isimli  hafıza bilgisini tutar. eger bu bir  deger tipi olsaydı ad  isimli değişkenimiz icinde direkt olarak "sanalprogramlama"bilgisini taşıyor olacaktı. her ne kadar string tipler class olsada structlar gibi davranır demiştik.deger tipleri ile kullandığımız  örnegi şimdi reference tiplere uyarlayalım.önce bir ev sınıfı yazalım

class ev
    {

        public int odasayisi;
        public int fiyat;
        public string semt;
      
           
    }
sonra ev sınıfından 1 nesne 1 de işaretçi  oluşturalım
 {
            ev ilkev = new ev();
            ilkev.fiyat = 500000;
            ilkev.odasayisi = 3;
            ilkev.semt = "kadıköy";
            ev ikinciev = ilkev;
            ikinciev.semt = "şişli";

            MessageBox.Show(ilkev.semt);
}

ekrana "kadıköy "bilgisi yerine "şisli" yazar
 ilk ev ( ev ilkev = new ev()) komutu ile bellege cıkar. ikinci ev ise (  ev ikinciev = ilkev)
 new anahtar kelimesi olmadan ilkeve eşitlenir ama bu eşitlenme hali aslında ilkevin tutmus olduğu adresi tutmasıdır yani burada 2 ayrı nesne yok sadece 2 değişkenin aynı adres bölgesini tutma durumu var.işte değer tiplerinden farkı budur biz
int a=5 ;
int b=a; dediğimizde bellekte 2 tane int degişkeni olusmustur oysa ikinciev=ilkev() demekle ilkev ;ikincievin tuttuğu adresi taşımıs oluyor dolayısı ile adresi tutan degişkenlerden birisi o sınıf uzerinde bir değer değişikligi yapınca otomatikmen ikinciside de aynı değişikligi göruyoruz.
peki ikinciev=null dersek ne olur bu sefer ikinci ev boşa çıkmıs olur artık hafızadaki adresi işaret etmiyordur. dolayısı ile ikinciev yazıp (.)noktaya basınca ögelerine ulasabilir olsakta bunu stuido icinde kullandığımızda
"Object reference not set to an instance of an object". hatasını alırız yani nesne örnegi gecerli bir nesneye atanmadı seklinde özetlenebilir bu hata mesajı. burada new anahtar kelimesini kullanırsak artık bağımsız ikinci bir nesnemiz olur.bu sefer yaptıgımız degişiklikler diger  nesne uzerinde etkili olmaz.şimdilik bu kadarı yeterli diye düsünuyorum.daha sonra diziler ile bu konu hakkında örnekler görecegiz ve tür tipleri daha saglam temellerde zihnimizde yer alacaktır.bir sonraki yazıda görüşmek dileğiyle.

15 Ekim 2014 Çarşamba

Kurs programı Demo uygulaması


Merhaba arkadaşlar  bugun bir konu işlemek yerine üzerinde çalışma yaptığım bir projenin bazı görüntülerini paylaşmak istedim sizinle. program öğrenci ve personel kayıt ile alakalı  umarım beğenirsiniz.

bu açılış ekranımız.




buradan program içindeki  formlara ulaşabiliyoruz

   

menüler vasıtası ile de tablolara ulaşabiliyoruz




tablolardan personeli seçtik açıklamalarını görüyorsunuz




buda farklı bir tablo öğrenci tablosu




öğrenci tablosunu datagridview nesnesi ile görüyoruz





ve son olarak öğrenci tablosunun kayıt ekranındayız tablolarda görmüş olduğunuz resim ve bilgilerin gerçekle alakası olmadığını rastgele girilmiş olan bilgiler olduğunuda hatırlatayım. aşağıda programın kısa bir tanıtımını görebileceğiniz video linkini paylaşıyorum bir sonraki yazıda görüşene kadar sağlıcakla kalın

Program Tanıtım videosu

7 Ekim 2014 Salı

Yapıcı Metot Constructor

Metotlar konusunu işlediğimiz zaman metotların dörde ayrıldığından bahsetmiştim bunlardan ikisini (deger döndüren ,ve döndürmeyen)görmüştük.okumamış olanlar yada hatırlamak isteyenler  Buraya göz atabilirler.Bugun üzerinde çalışacağımız metot ise constructor.kelime anlamı yapıcı olan inşa eden anlamına gelen constructor c# de sınıfı kuran metottur.diger metotlardan farklı olarak dönüş tipi almazlar (string,int,bool vs..) dönüş tipi olmadığı gibi void anahtar kelimesinde kullanmayız.ama parametre alabilirler ve overload edilebilirler  yani aşırı yuklenebilinir.ayrıca sınıf ismi ilede aynı olmak zorundadır.sınıflara (class) ayrıntılı olarak baska bir konuda bakıyor olacağız. windows formu açarak ismini constructor verdim.solution explorer uzerinde proje adına sag tıklayarak add sekmesinden class seçiyorum.ismini constr verdim


resimle class tanımını kısmen görüyorsunuz


şimdi de bunu windows standart formu içinde inceleyelim formu cift tıklayarak kod kısmına geçelim


 formun içindeki kod kısmı bizim tanımladığımız clasa oranla daha az koda sahip.aklınız karışmasın.fark ettiyseniz en dışta namespace alanı var. bu visual studioda bir proje acarken  verdiğimiz isim .solution explorerde görünen proje ve solution ismidir. proje isminden sonra suslu parantezler acılp kapanır.onun içine clasımız yazılır claslar açık yesil renkte olurlar. bizim oluşturduğumuz clasın ismi constr  windows formunda ise form1 clasların suslu parantezleride kapanınca artık içine metot yada değişken tanımı yapabiliriz. metotlar class dısında olmaz arkadaslar claslarda namespaca dısında olmaz. sıralama once  name space> class>değişken yada metot seklindedir. yazılanları resimle anlatacak olursak


tekrar classımızın olduğu alana dönerek class bölumunundeki parantezlerin içine ctor yazarak iki kere tab tusuna basalım ctor code snippet denilen kısa bir yoldur studio nun editörü otomatik olarak kodu tamamlar

 tab tusundan önceki

tabtan sonraki hali .şimdide uygulama ile asıl konumuza gelelim aşağıda constr icindeki degişkenler ile sınıfın kurucu metodunu göruyorsunuz



burada hazır aşırı yuklenmekten bahsetmisken  diger metotları anlattığım derste buna değinmedigim icin şimdi 
tam zamanı diye düşünerekten bahsedeyim biraz.aşırı yuklenme bir metodu birden fazla sekilde çagırabilme kurabilme şeklidir diye ifade edebiliriz mesela buna örnek vermek gerekirse aşagıdaki resim size yol gösterici olacaktır


formun load eventinde(olay) messagebox sınıfımızı kullanırken degerlerimizi girerken aşagı dogru acılan oklarla  parametre sayıları farklı olan kullanımlardan birisini seceriz ve degerleri veririz işte bu bir metodun birden fazla şekilde kullanılabilmesi anlamına gelir zaten parametre sayıları aynı isimleri aynı veri tipleri aynı olan metot kullanmaya calıssak ide bize hata verecektir.metotların ya parametre sayısı değişik olacak ya veri tipi yani en azından bir imzası farklı olmak zorunda.şimdi constr adlı sınıfımızı yapıcı metot ile kurmayı görelim






bir sınıfı kurarken  eğer biz  müdahale etmezsek c# varsayılan olarak o  sınıfı new anahtar kelimesini kullanırken yapıcı  metot vasıtası ile kendisi kurar.fakat  metodu siz kurup parametreli hale getirirseniz c# otomatikten kontrolü size bırakır.  ve parametre kullanmadığınız metot artık geçersiz hale gelir. ancak siz  class içinde parametresiz olan kullanımıda koda eklerseniz  artık iki şekilde'de kullanımı mümkün olur.

yapıcı metotların özelliklerini tekrar hatırlayacak olursak;
  1. Public olmalıdır
  2. sınıf ismi ile aynı olmak zorundadır
  3. deger döndürmezler void ,string ,int vs gibi tipler almazlar
  4. parametreli yada parametresiz kullanımı mevcuttur.
parametre tanımlarsak varsayılan parametresiz kullanımı ortadan kalkar birde static olma özelliği vardırki o zaman public erisim belirleyicisini kullanmayız.bunu referans ve deger tipleri konusuna saklayalım.
resmi bol uygulaması az bir konu oldu.simdilik söyleyeceklerim bu kadar bir kaska konuda görusene kadar saglıcakla kalın.

30 Eylül 2014 Salı

C# For Döngüsü

Merhaba Dostlar sizlerle tekrar beraber olmak çok güzel .programcılık adeta bir okyanus misali;  her gün yeni bir şeyler öğreniyoruz.bizimde amacımız bu engin deryada bir damla olabilmek.sözü uzatmadan bugun işleyeceğimiz konuya geçmek istiyorum .konu baslığımız for döngüsü  c# dilinde birden fazla döngü çeşidi vardır while,do while,for each ve for döngüsü hepsini birden anlatmak öğrenme yöntemi olarak pekte doğru degil hazmederek özümseyerek içselleştirerek adım adım öğrenme metodunu benimsemek gerekir. ben bu döngü çeşitlerinden  for döngüsü ile baslamayı düşünüyorum.ilerleyen konularda digerlerinede değineceğiz konu içeriğimiz döngü nedir,ne işe yarar yazım kuralları ve  örnek uygulama şeklinde olacak.hadi baslayalım


DÖNGÜ NEDİR

döngü bir olayın eylemin birden fazla kez tekrarlanmasıdır.programlama dünyasında ise genelde belli bir şart saglanıncaya kadar olan işlem tekrarı denilebilir.mesela facebooktaki üyelik ve şifre kısmını yanlış girdiğimiz sürece sisteme giriş yapamayız. hep giriş ekranında kalırız yada cep telefonlarında pin kodunu yanlış girdikçe bize tekrar pin kodunu sorması gibi.

DÖNGÜ NE İŞE YARAR

döngüler şifre kontrol gibi ufak çaplı işlerden tutunda binlerce yüz binlerce milyonlarca üyesi olan sistemleri kontrol etmek  veri tabanındaki kayıtlar arasından seçim yapmak gibi  yada c# içinde  dizileri koleksiyonları sınıfları dolaşmak gibi komplike işlemler dede kullanılır ve bize zaman ve iş gücü yönün dende  fayda sağlarlar

FOR DÖNGÜsü YAZIM KURALLARI

 visual studioda bir tane windows form uygulaması açın form1in tasarım kısmında iken çift tıklayarak load olayına gecin süslü parantezler içinde  for yazın gerisini resimler anlatıyor olmalı





 klavyeden tab tusuna 2 kere basın



bastıktan sonraki kodun hali bu şekilde olmalı



eğer elle kendiniz yazmak isterseniz ilk baslarda hata alabilirsiniz code snippet denilen kısa yol sayesinde tab tusuna 2 kere basınca kod otomatik tamamlanmış oldu.şimdi de for döngüsüne ait kod blokunu açıklayalım




 int i değişkenimizin integer tipinde olduğunu açıklıyor peki int olmak zorun damı tabiki hayır; byte yada short veya longta olabilir ondalıklı sayı  dahi kullanabilirsiniz  yani float ,decimal , double, tabi döngü kullandığınız sayısal tipin sınırını geçmemek koşulu ile.  peki değişkenimizin adı i olmak zorun damı degil yani a olur ,b olur  daha uzun bir isim  mesela sayi olabilir , ilkdeger vs..,bu bahsettiğimiz başlangıç degeri içindi ve 0 danda baslamak zorunda değiliz  3 veya 5 ,10000 canım nerden isterse o sayıyla baslarım  ama dediğim gibi veri tipi sınırına uymak zorundayız. yani siz  byte i=300 diyemezsiniz çünkü byte  en fazla 255 degerini alabilir ondalıklı sayı kullanarak i degişkenini 2.5(iki bucuk),12.37(12 nokta 37).254.2 gibi degerlerlede baslatabilirsiniz tamam başlangıç icin bu kadar acıklama yeter peki orta kısımdaki şart kısmı ne istiyor bizden ; .i < lenght döngünün başlangıç degerinden baslayıp kaca kadar döneceğini anlatır lenght sayıdır. sayıdan kucuk olması gerekir  başlangıç degerimizin   peki  <= dersek  ne olur sayıya eşit olana kadar döner. eşit veya eşit degilse gibi koşul operatorleri kullanilabilir. bunları operatorler kısmında  göreceğiz son olarak  i++ ise i degişkenini her seferinde 1 kere artır demektir. isterseniz 0.5 te artırabiliriniz ama int yerine ondalıklı veri tipi kullanmanız gerekecek.şimdi bu karısık yazıyı örneklerle acıklanır hale getirelim


FOR DÖNGÜ Uygulama ornekleri

ilk resim yukarıdaki ilk açıklamanın örneği forma extradan birde combobox yerlestirdim



 forun veri tipi byte  isminide i yerine a harfi ile baslattık.

 kodu calıstırınca


 comboboxun ici dolu gördugunuz gibi

şimdi de breakpointle bakalım breakpoint kodu satır satır takip ederek programda neler olduğunu görmemizi saglar kod satırında iken  fare ile bir satırı secip f9a basarsanız o satır basında kırmızı bir isaret olusur. bakın resimdeki gibi


simdi artım yerine eksiltmeyi görelim ve tam sayı kullanmak zorunda olmadıgımızı görmus olalım ayrıca birde listbox yerlestirelim formumuza


 float veri tipi kulalndıgımız için sayların sonuna f harfini koyduk
ve buda calısan kodumuzun  son görsel hali


işlemedigimiz break ve continue komutu var onuda diger donguleri işlerken anlatacagım .zaten mantık aynı o konuyu görunce ne demek istedigimi anlamıs olacaksınız.proejnin dosyası altta linkte oradan indirebiliriniz  yorumlarınızı ve görusleriniz eksik etmeyin. saglıcakla kalın bir sonraki yazıda görusmek uzere.


29 Eylül 2014 Pazartesi

C# Metotlar

Herkese merhaba bir konu ile yine karşınızdayım.bugün  metotları işleyeceğiz. önce tanımını yapacağız.sonra ne işe yarar ondan bahsedeceğiz çeşitlerini görüp yazım kurallarını anlatıp iki örnek uygulama ile bilgilerimizi pekiştireceğiz.örneklerden ilki basit giriş seviyede mesaj veren  metotken ikinciside biraz daha farklı düşünmemizi sağlayacak nesnel bir örnek olacak

Metot nedir

metot türkçe karşılık olarak yöntem yol usul tarz vs .. anlamına gelmektedir.
örneğin sabah uyanma zorluğu çekiyorsanız gece kurmuş olduğunuz telefonun alarmı uyanma konusunda sizin sıkıntınızı çözen size ait bir yöntem olabilir.programlama dünyasında ise iş parçası diyebiliriz belli miktardaki komutların bir araya gelerek bir işlem yapmasıdır.mesela bir web siteniz olduğunu düşünelim onlarca sayfanız var ve sayfalardaki linklerin renklerini sayfa bazlı manuel ayarlıyorsunuz.bir gün fikir değiştirip diyelim ki renkleri siyahtan maviye çevirmek isterseniz her sayfadaki linklerle tek tek uğraşmak zorunda kalırsınız. ama bastan bir metot yazarsak (web sitelerinde genelde css olur) sadece o metodun kodunu değiştirmekle bu metodu kullanan bütün sayfalardaki renklerini güncellemiş oluruz.

Metot Çeşitleri

 metotlar c# dörde ayrılır bunlar
  1. Yapıcı metotlar( constructor)
  2. Yıkıcı metotlar(destructor)
  3. geriye değer döndüren metotlar(int ,string bool)
  4. değer döndürmeyen metotlar (void)
arkadaşlar yapıcı ve yıkıcı metotları bir baska yazı konusu olarak ele almayı planlıyorum bugun deger  döndüren ve döndürmeyenleri göreceğiz. 

Metot Yazım Kuralları

bir metodun söz dizimi şu şekildedir;

[erişim belirleyicisi],geriye dönüş tipi ,metot ismi ,(parametreler)

kabul ediyorum pekte açıklayıcı olmadı; erişim belirleyicilerden baslayalım.erişim belirleyicisi metoda nasıl ulaşacağımızı gösteren bir yoldur mesela birden fazla windows formunuz var form1,form2 gibi...eğer metodumuz form1 içindeyse  form 2den çağırmak için  erişim belirleycisini public yapmamız gerekir tabi form1 sınıfının yeni bir nesnesini kurmak şartıyla. 

c#de 5 çeşit erişim belirleyicisi vardır;
  1. public
  2. private
  3. protect
  4. internal
  5. internal protect
 biz private ve public konusunu işleyeceğiz.diger özellikleri sınıfları(class) işlerken anlatacağım
public aslında  halka açık umumi olan anlamına gelir. bilgisayar duınyasında ise evrensel  olan dersek  sanırım yanlış olmaz:  ) eğer siz bir metodu public tanımlarsanız baska sınıflardan (mesela formlar) çağırabilirsiniz.şimdilik böyle bilin. private ise daha bir yerel anlamında kullanılır .sadece classınız içinde kullanabilirsiniz.şimdi aşağıdaki  resime alınmış kod blokuna dikkatinizi çekmek istiyorum


 formun load olayı tanıdık geldi degilmi aslında load bir olaydır. ama metotların söz diziminden hic bir farkı yok burada  private  erişim belirleyicimizdir metoda nasıl ulaşacağımızı belirtir ,void metodun dönüş tipini  , form1_load ise ismini temsil ediyor, parantez içindekilerse parametrelerimiz.eger private yazmassak yine sorun çıkarmaz varsayılan olarak  private kabul eder. yani  mesela söyle bir şeyde pekala olabilir.

void benbirmetodum ()
{
}

 gördüğünüz gibi erişim belirleyici yok ayrıca parantezlerimizin içide boş illaki icine parametre yazmak zorunda degiliz. 
dönuş tipi metod ismi ve parantezlerimiz yeterli oluyor bu kadar basit

 peki c# metot nasıl bir şeydir




resimde form1 sınıfımızın ismini yazıp noktaya basınca simgesi küpe benzeyen pembe renkli   bize sunulan şekildir.ayrıca  bu resimde  daire icine alınmıs ve alınmamıs hali ile görüyorsunuz.bu form olsun textbox olsun listbox veya  button olsun hic bir sekilde degişmez yani pembe küptür  aşagıdaki örnek iki bunu doğruluyor



 textbox1'e ait olan metot görünüyor ayrıca dönüs tipide void olan  bir metot uzerine gelince resmi buyultunce cıkan yazıyı daha iyi okuyacaksınız  yazıda textboxbase( yani textbox ana sınıfından türemis)  oldugunu belirtiyor 

peki gelin metotların türlerine bakalım;


 Geriye Deger Döndürmeyen metot ( void) Metotlar


gerçi yukarıda biraz void'ten  bahsettik ama öncelikli olarak geriye deger döndurmeyen metot ne demek ona bakalım.
yine uyanmak icin gece kurmus oldugunuz alarm ornegini verecek olursak alarm zamanı geldiginde ses çıkarmaya baslayacaktır uyanırsınız ve kapatırsınız sonuc olarak görevi statiktir duragındır hep kendini tekrarlar c# ortamına uyarlayacak olursak mesala console uygulamalarında clear methodu vardır ekranı temizler bunun geriye döndurdugu bir sey varmı?dogru cevabı bildiginizi biliyorum.bende sizin gibi dusundum
evet dogru cevap  yok. yada listbox.items.clear() oda liste kutusunun içini bosaltır.yani bize bir sey vermez görevini tamamlar cekilir kenara.kendi metotlarınızı yazmaya basladıgınızda daha anlasılır olmaya baslayacak. şimdi deger dondurmeyen metotla ilgili bir ornek yapalımki biraz daha bilgilerimiz kalıcı olsun


Parametresiz Deger Döndurmeyen Metot Uygulaması

yeni bir windows uygulaması açalım new project  windows form aplication şablonunu secelim


gelen ekranda ok tusuna basalım 

karsşımıza form1 sablonu gelecektir çift tıklayarak formun load olayına gecelim



 çift tıkladıktan sonra geldigimiz yerde formun load alanında yazılan kodları paylasıyorum




 Burada mesajgoster adında bir metot tanımladık metodun parametresi yok yaptıgı  sadece mesjgöstermek  metodu formun loadına koydugumuz için formdan önce mesajı görduk tamam tusuna basınca bos form1
goruntusu gelecek ekranımıza.şimdide aynı örnegi parametreli işleyelim bu sefer sabit mesaj yerine bizim belirledigimiz mesaj gelsin




mesajgoster içinde string bir degişken tanımladık ismini mesaj yaptık formun load olayında metodu cagırınca bizden string bir deger girmemizi istedi şimdi artık biz ne yazarsak onu göruyor olacagız.

Geriye Deger Döndüren Metot ( int,bool,string vs) Metotlar

bir metodun geriye deger döndürmesi ne demektir.aslında deger dondurmeyen yöntemden  yazım olarak cok farkı yok void yerine her hangi bir veri tipi gelir int,string, bool,object gibi  parametreli yada parametre almadan yazılabilir  biz void yerine yazdıgımız herhangi bir  veri tipini return anahtar kelimesi ile   göndeririz  (nereyemi tabi metodu cagıran yere formun loadına buttonun click olayına) yine çok karıştırmadan   günluk yasamdan örnekleyelim. bir çiftcinin tarlada calıstıgını dusunun bu zorlu bir sürectir emek harcar  ter döker alacagı mahsulun tohumlarını ister eli ile eksin isterse teknolojiden yararlansın  (traktör) sonucta önunde birden fazla yol metot yöntem var  (tercih onun karısayamayız degil mi)ama bu metot console.clear() gibi ekranı temizleyip beklemez  zamanı gelince tarladan ürün almaya baslar elinde kullanacagı somut seyler vardır ornegin  tarladan aldıgı domatesleri konserve yapabilir yada satıp ticaret yapabilir peki bumların deger döndüren metotlarla ne alakası var ..işte bu tip metotlarda bizim elimizde kulalnacabilecegimiz sınıf yada veri tipi verirler.deger döndürmeyen metodta direk metodun ismini yazarken  deger dondürenlerde ise donus tipine eşitleriz asagıda resimde  iki metodun farkını görüyorsunuz.

toplam adlı metodumuzun dönüş tipi int olsada this.text string bir özelliktir bunuda tostring metodu ile hallediyoruz. parametre kullanmadıkprojeyi yazının sonunda paylasacagım. şimdide parametreli deger dönduren metoda ait son örnekle konuyu sonlandıralım.

Geriye Deger Döndüren Metot Uygulama

 



 

Gördügünuz gibi dönüş tiplerini int bool char string vermek zorunda değiliz metotlarla işlem yaparken control sınıfları textbox ,button, listbox, veya form ,sqlconnection kısacası c# destekledigi tum tipleri sınıfları kullanabiliriz deger döndurmyen metotlarda ise parametre olarak kullanırız son  göruntumuz textboxun içine merhaba yazılmıs şekilde


 Bir konuyu daha sonlandırdık bir sonraki yazımıza kadar sağlıcakla kalın.eleştiri ve görüşlerinizi eksik etmeyiniz..

metotlar dosyasını indir

28 Eylül 2014 Pazar

Datatable Nesnesi İle Çalışmak - 2

blog için kısa tanıtım videosu
Herkese merhaba Datatable Nesnesi İle çalışmaya kaldığımız yerden devam ediyoruz.Programımızın en son çalışan hali resim 1 de gördüğünüz gibiydi.

                                                                    

Şimdi de  tablomuzun içindeki  verileri Alan isimlerine göre (ad,soyad,yaş) comboboxtan seçerek hemen altındaki textbox ile girilen veriyi eşleştiren ve sonucu bulduğunda sil butonu ile kaydı tablodan silen kodu yazacağım.kodla ilgili açıklamalar resim içinde okunabilir


                                                                         

Buraya kadar yaptıklarımızı kontrol etmek amacıyla programa önce bir kaç kayıt ekleyelim.sonrasında silme işlemini gerçekleştirelim.



                               
 

Evet gördüğünüz gibi tablomuza 3 kayıt eklemiş olduk.şimdi ekli olan kayıtlardan silme işlemini yapalım




comboboxtan soyad bilgisini seçip  altındaki textboxa Bilgin yazdığımızda sil butonuna basınca yakup bilgin adlı kaydın tablodan silinmiş olduğunu görüyoruz,ad ve yaş kriterleri ilede kayıtları silebilirsiniz 
Sırada olan ise  listboxa tablodaki bilgileri yazdırmak olacak kodu gösteren resmi paylaşıyorum 






Bir kaç kayıt ekleyip listboxa ekle butonuna basıyorum. ve eklenmiş halini görüyoruz alt resimde


Şimdi oluşturduğumuz tabloya göre sql server de tabloya  ekleme işlemine.öncelikli olarak okul adında bir veri veri tabanı  oluşturup içine Ogrenciler adında bir tablo ekledim. Alanları burdaki tablo ile aynı ad,soyad,yaş veri bilgisini 3 kolon tipinide nvarchar olarak tanımladım.ek olarak birde id adında primary key ekledim  aşağıda tabloyu görüyorsunuz




Veri tabanına ekle butonunun click olayına geçiyorum kodları yazmak için



Ve son olarak programı calıştırıp bir kaç kayıt giriyorum veritabanına yaz butonuna basıp sizleri sql tablosunun göruntusu ile başbasa bırakıyorum.



 veri tabanına yazılacak kayıtlar



ve select sorgusu sonrasında kayıtlarımızın tabloya yazılmış olması.iki aşamalı yazmayı düşündüğüm uygulamanın sonuna gelmiş bulunmaktayız.projenin kaynak kodlarını ekliyorum yararlanmak isteyenler acılan sayfanın altındaki mavi renkteki dosyayı indir yazan butona basarak indirebilirler.bir sonraki blogta görüşene kadar herkese iyi günler dilerim


Proje Dosyasını indir