Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Ahmet Faruk Nacaroğlu
Ahmet Faruk Nacaroğlu
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
40 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler:  C# / VC#/.NET Ahmet Faruk Nacaroğlu
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 27.5.2003
Okunma Sayısı : 30660
Yorum Sayısı : 1     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 30.4.2024
Turhal Temizer
Mac OS/X Removing CUDA 30.4.2024
Burak Selim Şenyurt
Kurumsal Yazılımcının Oyun Geliştirme ile İmtihanı 30.4.2024
Burak Selim Şenyurt
Matematik ve Oyun Programlama - Missile Command - Final 30.4.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
C# Dilinde Özellikler - 1
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Nesne yönelimli programlamanın günümüzde ne kadar yaygın olduğunu programlama ile ilgilenen herkes bilmektedir. Nesne Yönelimli Programlama (NYP) yaklaşımında temel olan prensiplerden birisi bilgi gizleme (information hiding)'dir. Bu prensibi projelerimizde uygulamak için C#'in sunduğu en önemli araçlardan biri olan sınıf özellikleri (class properties) konusunu inceleyeceğiz.

Bildiğiniz gibi, C# dilinde tasarlanmış bir sınıfta iki temel unsur bulunur. Birincisi sınıfın özellikleri (fields), ikinicisi ise sınıfın metodlari (methods)'dır. Herhangi bir sınıfın özellikeri sınıfta tutulan ilişikili verilerlerdir. Diğer taraftan sınıfın bizim için değişik işleri yapmasını metodları vasıtasıyla sağlarız. Sınıf tasarımı çok önemli bir iş olup; deneyim, konsantrasyon ve dikkat ister. Sınıfımızın özelliklerini tutan veriler, program akışı sırasında sınıf dışında değiştirilebilir veya bu değerlere ulaşmak istenebilir.

Bu durumda akla ilk gelen çözüm sınıfın verilerinin hepsinin dışarıdan ulaşilabilmesini ve değiştirilebilmesine olanak sağlayan public anahtari ile tanımlamakdir. Aşağıdaki programda bu tür bir çözümün uygun olabileceği düşünülmüştür:

using System;

namespace Property_Makale
{
    class Otomobil
    {
        public int model;
        public string marka;
        public string renk;

        public Otomobil(int model, string marka, string renk)
        {
            if(model>DateTime.Now.Year)
                    this.model=DateTime.Now.Year;
            else this.model=model;

            this.marka=marka;
            this.renk=renk;
        }

        public void OzellikleriGoster()
        {
            Console.WriteLine("\nOtomobilimizin Özellikleri: ");
            Console.WriteLine("\t Marka: "+ marka);
            Console.WriteLine("\t Model: "+ model);
            Console.WriteLine("\t Renk: "+ renk+"\n" );
        }
    }

    class OtomobilTest
    {
        static void Main(string[] args)
        {
            Otomobil oto1 = new Otomobil(2000, "BMW" , "Siyah");
            oto1.OzellikleriGoster();

            oto1.model=300;

            oto1.OzellikleriGoster();
        }
    }
}

Yukarıdaki kod örneğimizde iki tane sınıf bulunmaktadır. Otomobil sınıfı ile otomobil nesnelerimizi oluşturabiliriz. Ayrıca bu sınıfın OzellikleriGoster() metodu ile herhangi bir otomobil nesnemizin özelliklerini görmek için ekrarana yazdırıyoruz. İkinci sınıfımızda (OtomobilTest) ise Otomobil sınıfımızdan nesneler oluşturmak ve onların özellikerini çağırmak için kullanacağız. Şimdi isterseniz Main() fonksiyonunu incelemeye başlayalım. Metodun hemen ilk başında oto1 isimli nesnemizi oluşturuyoruz. oto1 nesnemizin özellikleri 2000 model, siyah ve BMW olsun. Bir sonraki satırda oto1 nesnemizin modelini 300 yapıyoruz. İşte burda büyük bir hata yapılıyor! Çünkü 300 yılında henüz otomobil üretilmemişti. Böyle bir hatayı nasıl önleriz? Çözüm olarak otomobil nesnemizin herhangi bir özelliğini değiştirmek için ayrı bir metod yazmamız gerekir. O zaman programızı şu şekilde değiştirmemiz gerekiyor:

using System;

namespace Property_Makale
{
    class Otomobil
    {
        private int model;
        public string marka;
        public string renk;

        public Otomobil(int model, string marka, string renk)
        {
            if(model>DateTime.Now.Year)
                    this.model=DateTime.Now.Year;
            else this.model=model;

            this.marka=marka;
            this.renk=renk;
        }

        public void OzellikleriGoster()
        {
            Console.WriteLine("\nOtomobilimizin Özellikleri: ");
            Console.WriteLine("\t Marka: "+ marka);
            Console.WriteLine("\t Model: "+ model);
            Console.WriteLine("\t Renk: "+ renk+"\n" );
        }

        public void ModelDegistir(int yeniModel)
        {
            if( (yeniModel>DateTime.Now.Year)||(yeniModel<1900) )           
                Console.WriteLine("Otomobilin modeli su an ki yildan büyük veya 1900'den küçük olamaz ! ");           
            else this.model=yeniModel;
        }
    }

    class OtomobilTest
    {
        static void Main(string[] args)
        {
            Otomobil oto1 = new Otomobil(2000, "BMW" , "Siyah");
            oto1.OzellikleriGoster();

            oto1.ModelDegistir(300);
            oto1.OzellikleriGoster();
        }
    }
}

Yukarıdaki programda Otomobil sınıfına ModelDegistir(int yeniModel) metodunu ekledik. Bu metod ile modeli değiştirilecek nesnenin modelinin şu anda bulunulan yıldan sonra ve 1900'den önce yapılmak istendiğinde hata mesajı veriyor ve modelini değiştirmiyor. Ayrıca sınıf içindeki model değişkenin tanımlanmasında private anahtarını da kullandığımıza dikkat ediniz. Bu şekildeki bir yaklaşım ile hem sınıfın iç işleyişini sınıf dışından saklamış oluyoruz hem de sınıfa ait verilerin değiştirilmesini sırasındaki hataları en az seviyede tutmayı sağlıyoruz.

Fakat yukarıdaki yöntemi genelde C++ programcıları kullanır(dı). Bizler C# programcıları olarak daha gelişmiş bir yola sahibiz. Sınıf içindeki değerleri değiştirmek ve ulaşmak için özellik (Property) aracını kullanırız. Aşağıdaki program ise C#'ın özellikleri nasıl kullandığına bir örnektir:

using System;

namespace Property_Makale
{
    class Otomobil
    {
         private int model;
         public string marka;
         public string renk;

         public Otomobil(int model, string marka, string renk)
         {
              if(model>DateTime.Now.Year)
                   this.model=DateTime.Now.Year;
              else this.model=model;

              this.marka=marka;

              this.renk=renk;
         }

         public void OzellikleriGoster()
         {
              Console.WriteLine("\nOtomobilimizin Özellikleri: ");
              Console.WriteLine("\t Marka: "+ marka);
              Console.WriteLine("\t Model: "+ model);
              Console.WriteLine("\t Renk: "+ renk+"\n" );
         }

        public int Model
        {
              get
              {
                   return model ;
              }

              set
              {
                  if((value>DateTime.Now.Year)||(value<1900) )
                   {
                        Console.WriteLine("Otomobilin modeli su an ki yildan büyük veya 1900'den küçük olamaz ! \n");
                   }
                   else this.model=value;
              }
        }
    }

    class OtomobilTest
    {
         static void Main(string[] args)
         {
              Otomobil oto = new Otomobil(2000, "BMW" , "Siyah");
              Console.WriteLine("Otomobilimizin modeli: "+ oto.Model);


              oto.Model=300;
              oto.OzellikleriGoster();
         }
    }
}

Yukarıdaki programı çalıştırdığımızda aşağıdaki sonucu alırız:



Çıktısını gördüğünüz program kodunda C#'ın özellik tanımlama ve kullanma yöntemini kullandık. Özellikler ile herhangi bir nesneye ait değişkenin değerini öğrenebilir ve değiştirebiliriz. Yukarıdaki örnek kodda yeralan aşağıdaki kısımda bir özellik(Property) tanımlıyoruz. Genellikle bir özelliğin ismi üzerinde iş yaptığı değişkenin ismi ile aynı olup sadece ilk harfi büyük olur. Aslında bu bir zorunluluk değil. Sadece C#'da bu bir gelenektir. Bu şekilde bir kullanım bizim kodumuzu okuyanların kodu daha kolay anlaması ve bizim başkalarının kodlarını daha kolay anlamamıza yardımcı olur. Bir özelliğin tanımında özellik isminden önce ne tür bir değer dönderecekse onun tipini belirtmeliyiz. Bu genelde özelliğin ilgili olduğu değişkenin tipidir :-)

    public int Model
        {
              get
              {
                   return model ;
              }

              set
              {
                  if((value>DateTime.Now.Year)||(value<1900) )
                   {
                        Console.WriteLine("Otomobilin modeli su an ki yildan büyük veya 1900'den küçük olamaz ! \n");
                   }
                   else this.model=value;
              }
        }
    }

Özellikler içinde get ve set olmak üzere iki ayrı blok kod olur. İstersek sadece get veya sadece set blokları olan özellikler de yazabiliriz. get bloğunda ilgili değişkenimizin değerini dışarıya döndeririz. set bloğunda ise değişkenimizin değerini değiştiririz. Burda gereken kontrolleri yapıp daha sonra uygunsa girilen değeri kabul edebiliriz. Eminimki get bloğu içinde dikkattinizi değişkeni ismi yerine value şeklinde çağırmamız çekmiştir. Bu sayede kod içinde karışıklık olmaz. Zaten sadece bir tane değişken üzerinde çalışıyorsunuz.

Bu makalemizde C# dilinde yeralan özellik (Property) kavramını inceledik. Bir ilerleyen makalelerimizde sadece yazılabilir (read-only) ve sadece okunabilir (write-only) özellik yazmayı ve kullanmayı inceleyeceğiz.

Makale:
C# Dilinde Özellikler - 1 C#, Visual C# ve .NET Ahmet Faruk Nacaroğlu
  • Yazılan Yorumlar
  • Yorum Yaz
Bu konu hakkında yayınlanan yorum bulunmamaktadır.
"Yorum Yaz" tabını kullanarak sizde yorumlarınızı yazabilirsiniz.
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor