C# Arayüz Özellikleri

C# Dersleri Ahmet Şenlik 2.848 kez görüntülendi.

C# Arayüz Özellikleri

Arayüzler yöntemlerin yanında özellikler de belirtebilir. Bunu yapmak için get ve/veya set anahtar sözcüğünü kullanırsınız. Ancak arayüzler uygulama kodları barındıramayacakları için get ve set erişimcilerinin gövdeleri yerine noktalı virgül (;)
kullanılır. Örneğin;

interface IEkranPozisyonu
{
   int X { get; set; }
   int Y { get; set; }
}

Bu arayüzü kullanan tüm sınıf ve yapılar get ve set erişimci yöntemleri ile birlikte X ve Y özelliklerini de kullanmak zorundadır. Örneğin;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ArayuzOzellikleri
{
   struct EkranPozisyonu: IEkranPozisyonu
   {
      int x, y;
      public int X
      {
         get
         {
            return x;
         }
         set
         {
            x = value;
         }
      }
      public int Y
      {
         get
         {
            return y;
         }
         set
         {
            y = value;
         }
      }
   }
}

Özellikleri Uygulamada Kullanma

Nesne tabanlı programlama yazılımında Özellikler (Properties) penceresini kullandığınızda çeşitli uygulama bileşenlerinin [Metin Kutusu (TextBox), Düğme (Button) gibi bileşenler] özellik değerlerini ayarlayan alan bir kod oluşturursunuz. Bazı bileşenlerin çok sayıda özelliği vardır ve bazı özellikler diğerlerinden daha fazla kullanılır. Aşağıdaki örnekte gördüğünüz söz dizimini kullanarak bir çok özelliği çalışma zamanında değiştirebilirsiniz. Merkez adında bir Ekran Pozisyonu nesnesi yaratıp X özelliğini 0’a ayarlayan ve onu alıp ekrana yazan basit bir örnek aşağıdaki gibi olabilir:

...
static void Main(string[] args)
{
   EkranPozisyonu merkez = new EkranPozisyonu();
   merkez.X = 0;
   Console.WriteLine(merkez.X);
}
...

Otomatik Özellikler

Özelliklerin başlıca amacı alanların kullanımını uygulamasını dış dünyadan saklamaktır. Özelliklerin amacına yönelik kullanımı önemlidir. Çünkü get ve set erişimciler, sadece alana bir değer atamak ya da değer okumak işlemlerini yerine getiriyorsa bunun doğru bir yaklaşım olup olmadığı sorusu akla gelebilir. Veriyi ortak (public) alanlar olarak göstermek yerine özellikler tanımlamanız için en az iki neden vardır:

  • Uygulamalarla Uygunluk: Alanlar ve özellikler, derlemelerde farklı meta veri kullanarak kendilerini ortaya koyar. Bir sınıf geliştiriyorsanız ve ortak alanlar kullanmaya karar verdiyseniz bu sınıfı kullanan bir uygulama, alanlar olarak bu
    öğelere başvuracaktır. Bir özelliği okurken ve yazarken kullandığınız söz dizimini bir alanı okumak ve yazmak için kullanabilseniz de derlenen kod gerçekte çok farklıdır. Daha sonra bu alanları özellikler olarak değiştirmeye karar verirseniz mevcut uygulamalar yeniden derlenmeden sınıfın güncellenmiş sürümünü kullanamaz. Uygulamayı bir şirketin çok sayıda kullanıcısına uyguladıysanız bu bir dezavantajdır.
  • Arayüzlerle Uygunluk: Bir arayüz gerçekleştiriyorsanız ve arayüz özellik olarak bir öğe tanımlıyorsa özellik sadece özel (private) alanlardaki veriyi okuyor ve yazıyor olsa bile arayüzdeki şartlara uyan bir özellik yazmanız gerekir. Sadece aynı adla bir ortak alan göstermek yoluyla bir özellik geliştiremezsiniz. Programlama dili tasarımcıları, programcıların gereğinden fazla kod yazacak kadar zamanı olmayan meşgul insanlar olduklarını bilir. Bu amaçla derleyici sizin için otomatik özellikler kodunu üretebilir.

Programlama dili tasarımcıları, programcıların gereğinden fazla kod yazacak kadar zamanı olmayan meşgul insanlar olduklarını bilir. Bu amaçla derleyici sizin için otomatik özellikler kodunu üretebilir.

class Daire
{
   public int YariCap { get; set; }
}

Bu örnekte Daire sınıfı YariCap adında bir özellik içerir. Bu özellik, türü dışında
herhangi bir bilgi içermez. Derleyici bu tanımı otomatik olarak aşağıda görüldüğü şekle
dönüştürür.

class Daire
{
   private int _yariCap;
   public int YariCap
   {
      get
      { 
         return this._yariCap; 
      }
      set
      { 
         this._yariCap = value; 
      }
   }
}

Özellikler İle Nesneleri Başlatma

Bir nesneyi başlatmak için kurucuları tanımlamayı öğrenmiş olmalısınız. Bir nesne birden çok kurucuya sahip olabilir ve bir nesnedeki farklı öğeleri başlatmak için çeşitli parametrelerle kurucular tanımlayabilirsiniz. Ancak bu pratik bir yaklaşım değildir. Bir sınıfın kaç adet alan içerdiğine ve alanları başlatmak için istediğiniz çeşitli bileşimlere bağlı olarak çok sayıda kurucu yazmaya son verebilirsiniz. Bir sınıf oluşturulduğunda, set erişimcilere sahip ortak (public) özellikler için değerler belirleyerek bu oluşumu başlatabilirsiniz. Yani Ucgen adında bir sınıfın nesnelerini oluşturup bunları herhangi bir bileşimle belirleyebilirsiniz. Ucgen sınıfı aşağıdaki şekilde tanımlanmış olsun:

class Ucgen
{
   private int kenar1Uzunluk = 10;
   private int kenar2Uzunluk = 10;
   private int kenar3Uzunluk = 10;
   public int Kenar1Uzunluk
   {
      set { this.kenar1Uzunluk = value; }
   }
   public int Kenar2Uzunluk
   {
      set { this.kenar2Uzunluk = value; }
   }
   public int Kenar3Uzunluk
   {
      set { this.kenar3Uzunluk = value; }
   }
}

Bu sınıfa ait özellik ile nesne başlatma bileşimleri aşağıda görüldüğü gibi olabilir:

1.  Ucgen ucgen1 = new Ucgen { Kenar1Uzunluk = 20 };
2.  Ucgen ucgen2 = new Ucgen { Kenar1Uzunluk = 20, Kenar2Uzunluk = 15 };
3.  Ucgen ucgen3 = new Ucgen { Kenar1Uzunluk = 20, Kenar2Uzunluk = 15, Kenar3Uzunluk = 10 };

1. örnekte ucgen1 nesnesi oluşturulurken sadece Kenar1Uzunluk özelliğine 20 değeri verilmiş diğer iki özellik ayarlanmamıştır (Kenar2Uzunluk ve Kenar3Uzunluk). Diğer özelliklere biz değer vermediğimiz için oluşturulan ucgen1 nesnesinin alanlarının değerleri aşağıdaki gibi olacaktır:
kenar1Uzunluk – 20
kenar2Uzunluk – 10
kenar3Uzunluk – 10
2. örnekte nesne oluşturulurken Ucgen sınıfında yer alan kenar1Uzunluk 20, kenar2Uzunluk 15 olarak belirtildiğinden, kenar3Uzunluk sınıf içerisinde ayarlandığı hâliyle yani 10 olarak kalacaktır.
3. örnekte tüm uzunluklar özellikler yardımıyla ayarlandığı için tüm uzunluklarımız verilen değerlerle ayarlanacaktır.

Kocaeli Üniversitesinde Bilgisayar Programcılığı okudum DGS ile 2016 yılında Sakarya Üniversitesi Bilgisayar mühendisliğini kazandım. Yazılımla uğraşmayı çok seviyorum bu alanda kendimi daha da geliştirmeyi düşünüyorum. Eğer siz de seviyorsanız bu işi devam edin başlamadıysanız başlayın başaracağınıza inanın. 🙂

Sosyal Ağlarda Paylaş

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.