Ara:

Şu an misafir modundasın. YazılımDevi olmak ister misin? Giriş Yap / Kayıt Ol

Makale Hakkında!

C# As ve Is Operatörleri Bazen Hayat Kurtarır Makale Yazarı Okunma Sayısı Eklenme Tarihi
Engin Demiroğ 716 24.01.2012

Makale Detayı

C# As ve Is Operatörleri Bazen Hayat Kurtarır
 
Bugün bir bankanın yazılım ekibine verdiğim bir derste As ve Is operatörlerinin nesnel bir yazılım mimarisinde ne kadar da işe yarayabileceğini gördüm. Şimdi kısaca sizinle paylaşmak istiyorum.
 
Derste amaç, generic metodları gerçek hayat projelerine karşı olması gereken bir bakış açısıyla anlatmaktı. Bir örnek yaptım. Yine örneğimin konusu YazilimDevi.Com idi. Bizim için Makale ve Video birer Ders’tir. Dolayısıyla sadece belirli özellikleri ile birbirinden ayrılırlar.
 
Öncelikle Ders(Base),Makale ve Video sınıflarımıza bakalım.
 
Ders.cs
 
  1. class Ders
  2.     {
  3.         private int _id;
  4.  
  5.         public int Id
  6.         {
  7.             get { return _id; }
  8.             set { _id = value; }
  9.         }
  10.  
  11.         private string _baslik;
  12.  
  13.         public string Baslik
  14.         {
  15.             get { return _baslik; }
  16.             set { _baslik = value; }
  17.         }
  18.     }

 
Makale.cs

 
  1. class Makale:Ders
  2.     {
  3.         private string _detay;
  4.         public string Detay
  5.         {
  6.             get { return _detay; }
  7.             set { _detay = value; }
  8.         }
  9.     }
  10.  

Video.cs
 
  1. class Video:Ders
  2.     {
  3.         private string _dosyaYol;
  4.         public string DosyaYol
  5.         {
  6.             get { return _dosyaYol; }
  7.             set { _dosyaYol = value; }
  8.         }
  9.     }
  10.  

Madem bunlar benzer yapılar. Bunların ortak metodları da olmalı. Mesela Ekle metodu:) Generic yapalım.
DersDAL.cs
 
  1. class DersDAL
  2.     {
  3.         public void Ekle<T>(T ders)where T:Ders
  4.         {   
  5.             if (ders is Makale)
  6.             {
  7.                 Makale makale = ders as Makale;
  8.                 Console.WriteLine(string.Format("{0} isimli makale eklendi, Detay = {1}",makale.Baslik,makale.Detay));
  9.             }
  10.             if (ders is Video)
  11.             {
  12.                 Video video = ders as Video;
  13.                 Console.WriteLine(string.Format("{0} isimli video eklendi, Yol = {1}", video.Baslik,video.DosyaYol));
  14.             }
  15.         }
  16.     }
  17.  

Burada Ekle metodunun generic olduğunu ve T:Ders şeklinde generic bir kısıt koyulduğunu görmekteyiz. Yani “T”, Ders veya Ders’ten türeyen bir nesne olabilir.
 
Daha sonra Ders’in Makale veya Video’dan hangisinin olduğunu yakalamamız gerekiyor. Burada imdadımıza “is” operatörü çıkıyor.
 
Buraya kadar herşey güzel fakat asıl sıkıntı burdan sonra başlıyor. Çünkü ben “T ders” ile sadece Ders objesinin özelliklerine ulaşabilirim. Mesela eğer gönderilen obje Makale olsa bile, onu Ders üzerinden tükettiği için “Detay” özelliğine ulaşmak mümkün olmayacaktır. Dolayısıyla aşağıdaki gibi bir Cast işlemi mümkün olmayacaktır.
 
 
İşte burada yardımımıza “As” operatörü koşuyor. As çalışma anında Cast yapmaya çalışıyor. Çevirebilirse ne mutlu bize. Çeviremezse null atar. Hepsi bu. Zaten “is” ile kontrol yaptığımız için sorun olmayacağı da kesin.
 
Aşağıda da bir kullanım örneği ekliyorum.
 
  1. class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             DersDAL dd = new DersDAL();
  6.             dd.Ekle<Video>(new Video {Baslik="C# Generics",DosyaYol="falan filan" });
  7.             Console.ReadLine();
  8.         }
  9. }
  10.  

Faydalı olması dileğiyle.
Engin Demiroğ,MCT,engin@yazilimDevi.com


Makale Tagları

Makale Dosyası

Makaleye Ait Dosya Bulunamamıştır

Paylaş


Yazar Hakkında
Genel Bilgiler   Yazar Hakkında
Ad: Engin Demiroğ 1985 doğumlu Engin Demiroğ Başkent Üniversitesi Yönetim Bilişim Sistemleri bölümü mezunudur. Lise yıllarından itibaren yazılım teknolojileri ile uğraşmaktadır. Bir çok kurumsal projede çalışmış olan yazarımız şu an İnfopark bünyesinde kamu kuruluşlarına ve özel kuruluşlara yazılım ve veritabanı danışmanlığı hizmeti vermektedir. Yazarımızın uzmanlaştığı alanlar .Net, Sql Server,Sharepoint,Team Foundation Server, Test ve Modellemedir. YazılımDevi.Com'un kurucularından olan Engin Demiroğ YazılımDevi.Com başta olmak üzere bir çok sitede yüzden fazla makale ve video yayını yapmıştır. Aynı zamanda yazarımız bir çok üniversite ve kuruluşta yüzden fazla eğitim ve semineri başarı ile yürütmüştür.
Kurum: İnfopark
Meslek: Yazilim Danışmanı / Eğitmeni
E-Mail: engin@yazilimdevi.com
Web Sitesi: http://www.engindemirog.com
Makale-Video: 206

Bu makale için yapılmış yorumlar

Bu makale hakkında yorum yapınız!...

Bu makale hakkında yorum yapabilmek için lütfen üye olunuz veya giriş yapınız.

Konular

Yazarlar

Son Eklenen Makaleler

Son Eklenen Videolar

Ziyaretçi İstatistiği

ImageOnline : 378         Bugün : 2622

Bu Ay : 52661        Bu Yıl : 298162

Toplam : 681001

Kullanıcı Giriş Paneli!
E-Mail:
Şifreniz:
Giriş Yap

Şifremi Unuttum!
E-Mail:
    Gönder