Mustafa ÖZCAN - Kişisel Web Sitesi

C# Nullable Tipler İçin Extension Methods ve Helper Method Kullanımı

mustafaozcan - 26.11.2009 09:39:00

Öncelikle Nullable tipler , Extension Methods ve Helper Method kavramlarını açıklayarak başlayalım. Daha sonra da Nullable tipler için kullanılacak örnek sınıflarımıza değinelim.

1 - Nullable Tipler :

C# ta Nullable tipler framework 2.0 ile birlikte gelmiştir. Nullable tipteki bir değişkene hem kendi türünden bir değer hemde null değer atanabilmektedir. Nullable tipler, tip tanımlaması sonuna ? konularak belirtilir. Örneğin: int? , DateTime? , bool? gibi.

Örnek bir class ve property üzerinde çalışalım.

public class Test
{

    private int? _sayi;

    public int? Sayi
    {
        get { return _sayi; }
        set { _sayi = value; }
    }

    public Test()
    {
    }

}

Bir butonumuz ve bir textbox ımız olduğunu varsayalım. Butona tıkladığımızda yukarıdaki class tan bir nesne türetip textbox tan gelen değeri Sayi property sine atayalım. Genel kullanım tarzı aşağıdaki gibi olacaktır.

Test t = new Test();

if (!string.IsNullOrEmpty(textbox1.Text))
    t.Sayi = Convert.ToInt32(textbox1.Text);
else
    t.Sayi = null;

Bu atama işlemini biraz daha kısa yazmak istersek aşağıdaki gibi yazabiliriz :

Test t = new Test();
t.Sayi = string.IsNullOrEmpty(textbox1.Text) ? (int?)null : Convert.ToInt32(textbox1.Text);

 

2 - Extension Methods :

Her atama işleminde örneklerdeki kadar çok kontrol yerine daha kısa yöntemler geliştirmek te mümkündür. Framework 3.5 ile birlikte Extension Methods desteği gelmiştir. Extension Methods desteği ile birlikte framework te var olan tiplere yeni metodlar ekleyebiliriz. Yazacağımız class ve metodlar static olmalıdır. Buradaki en önemli ayrıntı IkiKati metodu parametresi olan string str önündeki this anahtar sözcüğüdür. Bu kelime ile artık string türüne yeni bir metod daha kazandırmış oluyoruz.

Örneğin string bir değişkenin int e çevrilebiliyorsa 2 katını alan metod yazalım.

public static class StringExtensions
{
    public static int? IkiKati(this string str)
    {
        int i;
        if (Int32.TryParse(s, out i)) return i*2;
        return null;
    }
}

Evet sıra geldi bu metodun nasıl kullanılacağına. Biz stirng türü için bir metod yazdığımıza göre kullanım şekli de stringDegisken.IkiKati() biçimindedir.

Örnek olarak str değişkeninin değerini int e çevirerek iki katını Sayi değişkenine atamayı gösterelim.

string str = "3";
int? Sayi = str.IkiKati();

Bu şekilde çok kullandığınız metodları Extension Methods türüne çevirip bir dll haline getirerek bir çok projede kullanabilirsiniz.

 

3 - Helper Method :

Peki uygulamamız Framework 2.0 desteği ile geliştiriliyorsa Extension Methods özelliğini nasıl kullanabiliriz. Bunun cevabı da Helper Method olacaktır. Kullanımı Extension Methods a göre farklı ancak sizin zaten bildiğiniz fonksiyon kullanımından farklı olmadığını göreceksiniz.

Helper Class Örneği:

public static class StringHelper
{
    public static int? IkiKati(string str)
    {
        int i;
        if (Int32.TryParse(s, out i)) return i*2;
        return null;
    }
}

Helper Class Kullanımı :

string str = "3";
int? Sayi = StringHelper.IkiKati(str);

Bu açıklamalardan sonra her iki konu için örnek sınıflarımıza geçebiliriz.

 

4 - Nullable Tipler İçin Extension Methods Sınıfı :

Uygulamalarınız Framework 3.5 ve daha yukarı bir sürüme göre geliştiriliyorsa aşağıdaki sınıfı projenize dahil ederek kullanabilirsiniz. En çok ihtiyaç duyulan Nullable tipler için yazdığım örnek sınıf aşağıdadır.

public static class StringExtensions
{
    public static int? ParseNullableInt32(this string s)
    {
        int i;
        if (Int32.TryParse(s, out i)) return i;
        return null;

    }
    public static long? ParseNullableInt64(this string s)
    {
        long i;
        if (long.TryParse(s, out i)) return i;
        return null;
    }
    public static DateTime? ParseNullableDateTime(this string s)
    {
        DateTime i;
        if (DateTime.TryParse(s, out i)) return i;
        return null;
    }
    public static decimal? ParseNullableDecimal(this string s)
    {
        decimal i;
        if (decimal.TryParse(s, out i)) return i;
        return null;
    }
    public static double? ParseNullableDouble(this string s)
    {
        double i;
        if (double.TryParse(s, out i)) return i;
        return null;
    }
}

Bu metodları kullanarak Nullable türden bir değişkene değer ataması yapabilirsiniz. Eğer atamak istediğiniz değer o türe dönüştürülebiliyorsa değer atanır dönüştürelemez ise null değer atanır.

Örnek : Bir textbox tan gelen veriyi Personel sınıfının ilgili property sine atanması.

Personel p = new Personel();
p.KayitTarihi = txtKayitTarihi.Text.ParseNullableDateTime(); //p.KayitTarihi DateTime? dir.
p.Save();

5 - Nullable Tipler İçin Helper Method Sınıfı :

Projeleriniz Framework 2 desteğine göre geliştiriliyorsa Nullable tipler için aşağıdaki Helper Method sınıfını kullanabilirsiniz. 

public static class StringHelper
{
    public static int? ParseNullableInt32(string s)
    {
        int i;
        if (Int32.TryParse(s, out i)) return i;
        return null;
    }
    public static long? ParseNullableInt64(string s)
    {
        long i;
        if (long.TryParse(s, out i)) return i;
        return null;
    }
    public static DateTime? ParseNullableDateTime(string s)
    {
        DateTime i;
        if (DateTime.TryParse(s, out i)) return i;
        return null;
    }
    public static decimal? ParseNullableDecimal(string s)
    {
        decimal i;
        if (decimal.TryParse(s, out i)) return i;
        return null;
    }
    public static double? ParseNullableDouble(string s)
    {
        double i;
        if (double.TryParse(s, out i)) return i;
        return null;
    }
}

Örnek:

Personel p = new Personel();
p.KayitTarihi = StringHelper.ParseNullableDateTime(txtKayitTarihi.Text); //p.KayitTarihi DateTime? dir
p.Save();

Özellikle katmanlı uygulamarda veribanındaki nullable alanlara atama yapmak istediğinizde çok işinize yarayacaktır.

 


Paylaş

Taglar : ,

Kategoriler : C#

Ineta Next (Diyarbakır, İstanbul, Kayseri, Denizli)

mustafaozcan - 24.11.2009 20:11:00

Gelecek nesil yeni yazılım teknolojileri ile ilgili teknik bilgi paylaşımı çerçevesinde oturumların bulunacağı ayrıca Professional Developer Conference'da ilk defa duyurulacak bazı konuların da yer alacağı Ineta Next aşağıdaki tarihlerde ve yerlerde gerçekleştirilecektir. Şimdilik etkinlik detayları bir sürpriz/sır olarak saklanıyor. Çok yakında tam etkinlik planının duyurulacağı belirtilmektedir. Fakat bu süreçte siz zaman kaybetmeyin ve sınırlı katılım olacağı bu etkinliğe hemen ÜCRETSİZ kayıt olun!

5-6 Aralık / Diyarbakır

12-13 Aralık / İstanbul

19-20 Aralık / Kayseri

26-27 Aralık / Denizli

Kayıt için: http://www.inetatr.org


Paylaş

Taglar : , , ,

Kategoriler : ASP.NET | C# | Etkinlik

FamilyShow 3 Türkçe - Aile Soyağacı Programı

mustafaozcan - 21.08.2009 18:01:00

Daha önce 2.0 sürümünü Türkçe'ye çevirdiğim ve bazı hatalarını giderdiğim Family Show programının 3.0 İngilizce sürümü aylar önce yayınlandı fakat bu konuya şimdi zaman ayırabildiğim için Türkçe sürümünü bugün yayınlayabiliyorum.

Yeni sürümde en çok istenen özelliklerden olan kayıtlı aile üyeleri arasındaki evliliklerin (akraba evlilikleri) gösterilmesi ve girilen verilerin (bilgiler, resimler, ögeçmişler) tek dosyada kaydedilmesi özellikleri eklenmiştir.

Türkçe ye çevirirken bazı değişiklikler yaptım bunlar aşağıda listelenmektedir.

  • Bütün uygulama arayüzü, gerekli olan class ve enum lar, metinler ve hata mesajları Türkçe ye çevrildi.
  • Menü ve logolar üst tarafa küçültülüp birleştirildi ve paneller arasındaki boşluklar daraltılarak kullanım alanı arttırıldı.
  • GEDCOM formatındaki importlarda Türkçe karakter sorunları düzeltildi.
  • Uygulama ilk çalıştığında örnek aile bilgileri oluşturulması iptal edildi.

Eski Sürümden Yeni Sürüme Güncelleme:

  • FamilyShow 2 Türkçe kullananlar eski aile dosyasını açtıktan sonra GEDCOM menüsünden Dışarı Aktar menüsünü seçip GEDCOM formatında (.ged uzantılı) bir klasöre kaydediniz.
  • Eski uygulamayı kapatınız.
  • FamilyShow 3 Türkçe programını açtığınızda ilk ekranda İçeri Aktar menüsünü seçip biraz önce kaydettiğimiz dosyayı gösteriniz.
  • Bütün bilgiler ekrana gelecektir. Daha sonra kaydet menüsünden yeni uzantısı olan .familx formatında kaydedebilirsiniz. Bu dosyayı uygulama dizinine kaydederseniz uygulamayı taşıdığınızda o da taşınacaktır.

Gereksinimler :

Family Show 3 İndirmek İçin:


Paylaş

Taglar : , , ,

Kategoriler : C# | Programlar

SubSonic 3 Sürümü Yayınlandı

mustafaozcan - 05.07.2009 15:32:00

 

SubSonic 3 sürümü yayınlandı. Framework 3.5 ve linq desteği kullanılan bu sürüm bir çok yeni özelliği de beraberinde getirmektedir.

Özellikle Migrations yada SimpleRepository diye adlandırılan kodlar sayesinde kendi oluşturduğunuz modellerin de veritabanı üzerinde oluşturulması artık çok kolay. Hatırlarsanız eski sürümlerde hep tek yönlü bir code generation olmaktaydı. Yani sadece database den class a, ancak yeni versiyon ile manuel oluşturduğunuz classların db ye oluşturulması çok kolay.

En büyük özelliklerden birisi de artık MVC projelerinde sorunsuz kullanılabilmektedir.

Projenin sitesi yenilenmiş, dökümantasyon daha anlaşılır bir şekilde gruplandırılmış, kaynak kodlar github a taşınmış.

Daha detaylı bilgi için :

Yenilenen Proje sitesi : subsonicproject.com

Yenilenen Dökümanlar

Yenilenen kaynak kod arşivi : http://github.com/subsonic


Paylaş

Taglar : , , , ,

Kategoriler : C# | Veritabanı (Database)

Visual Studio 2010 Beta 1 ve .NET Framework 4 Beta 1

mustafaozcan - 19.05.2009 18:12:00

Visual Studio 2010  Beta 1  ve .NET Framework 4 Beta 1 sürümü yayınlandı. Şu anda sadece MSDN üyeleri indirebiliyor ancak 20 Mayıs Çarşamba günü (Türkiye saati ile 20:00) itibaren herkes tarafından indirilebilir.

Linkler aktifleştiğinde aşağıdaki adreslerden indirebilirsiniz.


Başlıca dikkat çekilen noktalar ise şu şekilde sıralanmış.
  • .Net Framework 4.0
  • Cloud Development - Windows Azure
  • Parallel Development
  • TDD iyileştirmeleri
  • ASP.NET - CSS tasarım değişiklikleri
  • Javascript debugging iyileştirmeleri
  • C++ Compiler değişiklikleri
  • Sharepoint şablonları
  • Yeni proje şablonları
  • Windows 7 - MFC - Ribbon UI, ve WPF değişiklikleri.
  • Application Model değişiklikleri
  • Test Runne
  • C# ta dynamic keyword ü
  • F# artık yükleme paketine dahil

 

İncelemelerden sonra daha detaylı bilgi vermeye çalışacağım.

Ayrıca ASP.NET 4 iyileştirmelerini bu sayfadan okuyabilirsiniz (İngilizce)


Paylaş

Taglar : , , ,

Kategoriler : ASP.NET | C#

SubSonic 2.2 Sürümü Yayınlandı

mustafaozcan - 11.04.2009 15:33:00

 

SubSonic 2.2 sürümü yayınlandı. Release Notes dan okuduğum kadarı ile 2.1 den bekleyen birçok bug düzelmiş. Ancak henüz deneme fırsatım olmadı. Denedikten sonra tekrar burada sonuçları yazacağım.

Binary Formatını aşağıdaki adresten indirebilirsiniz (SubStage de dahil):

http://subsonicproject.googlecode.com/files/SubSonic2.2.zip

Kaynak kodlarını da aşağıdaki adresten indirip inceleyebilirsiniz:

http://subsonicproject.googlecode.com/svn/trunk/


Paylaş

Taglar : ,

Kategoriler : ASP.NET | C# | Web

Could not load file or assembly System.Data.SQLite or one of its dependencies

mustafaozcan - 05.03.2009 12:00:00

.Net ve SQLite (System.Data.SQLite) ile web veya windows uygulaması geliştiriyorsanız 64 bit bir işletim sisteminde uygulamanızı test ettiğinizde "Could not load file or assembly 'System.Data.SQLite' or one of its dependencies" şeklinde bir hata alacaksınızdır. Bunun çözüm yolunu daha önce blogda yayınladığım aşağıdaki linkte bulabilirsiniz

http://www.mustafaozcan.net/tr/post/2009/02/28/Microsoft-Jet-OLEDB-4-0-provider-is-not-registered-hatasi-cozumu.aspx

 


Paylaş

Taglar : , , , , , ,

Kategoriler : ASP.NET | C# | İpucu (Tips & Tricks) | Win Forms

Visual Studio 2008 Server Explorer ve Microsoft StyleCop Uyumsuzluğu

mustafaozcan - 14.10.2008 14:15:00

Visual Studio 2008 kullanıyor ve Microsoft un StyleCop eklentisini de yüklediyseniz Visual Studio View menüsünden Server Explorer ı görüntülemek istediğinizde açılmadığını fark edebilirsiniz. Bütün ayarlarınızı eski haline alsanız da sorun düzelmeyecektir. Bunun nedeni StyleCop eklentisidir. Benim tavsiyem Şimdilik bu hata giderilene kadar StyleCop eklentisini kurmayın ya da benim Server Explorer ile işim olmaz diyorsanız kurabilirsiniz.

StyleCop = Microsoft un C# kaynak kodlarını analiz etmek için hazırladığı bir Visual Studio Eklentisi. Geliştirdiğiniz projelerde yazdığınız C# kodlarını inceleyecek size önerilerde bulunuyor. 

Eklenti ile ilgili daha detaylı bilgiyi bu web sitesinden alabilirsiniz.


Paylaş

Taglar : , ,

Kategoriler : C#

resimyok Mustafa ÖZCAN
Yazılım Geliştirici
E-mail Send mail

Bağış Yapın

Reklam

Online


Online Ziyaretçi : 12

Translate This Page

B l o g - E n g i n e