İlginizi Çekebilir
  1. Ana Sayfa
  2. C Sharp

C# Extension Methods – Genişletme Metodları #3

C# Extension Methods – Genişletme Metodları #3
+ - 0

C# Extension Methods – Genişletme Metodları #3, yazım ile Extension Metod dersime devam ediyorum. Bu dersimizde ikinci kısmına geçiyoruz.

C# Extension Methods – Genişletme Metodları #3

Önceki yazımda Extension Method konusuna bir giriş yapmıştık ve Extension Methods #2 dersimizde 5 tane örnek vermiştik. Bu dersimde bir çok genişleme metoduna yer vereceğim. Yani bu dersimiz daha fazla örnek yapmak üzerine olacaktır.

Kullandığım birçok extension metod ‘u bu yazımda paylaşacağım.

Örnek Method 1, 2, 3

Şimdi Object tipindeki değişkenleri Double, Datetime ve Bool ‘a dönüştüren genişletme metodları vereyim. Teknik olarak bu metodlar bana ait değil yani ben yazmadım ama mantıklı yazıldığı için bende direk kullanıyorum.

        public static double ToDouble(this object sayi)
        {
            try
            {
                if (sayi == null) throw new Exception();
                double x = Convert.ToDouble(sayi);
                return x;
            }
            catch (Exception)
            {
                return 1;
            }
        }
        public static DateTime ToDateTime(this object s)
        {
            try
            {
                return Convert.ToDateTime(s);
            }
            catch (Exception)
            {
                return DateTime.MinValue;
            }
        }
        public static bool ToBoolean(this object s)
        {
            try
            {
                return Convert.ToBoolean(s);
            }
            catch (Exception)
            {
                return false;
            }
        }

Kullanımlarını yazmama gerek olmadığını düşünüyorum. :)

Örnek Method 4

Bir kaç tane daha metod vereyim. Bu method tamamen bana aittir bir telefon bilgisi tutan (biz biliyoruz) string değişkeni 05381256987 şeklinde düzenliyor. Bu konuyu da daha önce C# Telefon Numarası Kontrolü – REGEX Sınıfı adında bir ders olarak eklemiştim.

Herkes telefonları aynı formatta yazmıyor. Bazıları,

  • aralarda boşluklar bırakıyor 0 538 125 69 87
  • servis sağlayıcı kodunu parantez içinde yazıyorlar 0 (538) 125 69 87
  • aralara tre ( – ) atıyorlar 0538-125-69-87

Yani herkes farklı yazabiliyor. Bu da bizim için sıkıntılı bir durum. Bunun için güzel bir metod yazarak her zaman istediğimiz formatta kayıt edebiliriz.

 public static string ToTelefonFormat(this string telefon)
        {
            Match match;
            string desen = "", DogruTelefon = "";
            telefon = telefon.Replace("-", "").Replace("_", "").Replace("(", "").Replace(")", "").Replace(" ", "").Replace("+", "");
            if (telefon.Substring(0, 2) == "95")
            {
                telefon = telefon.Remove(0,1);
            }
            switch (telefon.Length)
            {
                case 10:
                    desen = @"^(5(\d{9}))$";
                    break;
                case 11:
                    desen = @"^(05(\d{9}))$";
                    break;
                case 12:
                    desen = @"^(905(\d{9}))$";
                    break;
                default:

                    break;
            }
            match = Regex.Match(telefon, desen, RegexOptions.IgnoreCase);
            if (match.Success)
                switch (telefon.Length)
                {
                    case 10:
                        DogruTelefon = "0" + telefon;
                        break;
                    case 11:
                        DogruTelefon = telefon;
                        break;
                    case 12:
                        DogruTelefon = telefon.Remove(0, 1);
                        break;
                    default:
                        DogruTelefon = "0";
                        break;
                }

            return DogruTelefon;
        }

Kullanımı ise,

 MessageBox.Show(textBox4.Text.ToTelefonFormat());

Çalışmasını görelim :)

c# extension methods

Gördüğünüz gibi saçma sapan bir formatta yazdığım telefon numarasını tamda istediğimiz gibi düzenledi.

 

Örnek Method 5

Bu method, bir veri kümesinden (datatable vs.) verileri okuyup formdaki yerlerine yazdırmak istediğimizde, eğer formda checkbox var ise aldığımız değeri o checkbox’a yansıtmak için bir kaç satır kod yazmamız gerekiyor değil mi?

Örneğin şöyle

            DataTable dt = new DataTable();
            /// okuma ve doldurma kodları
            if (dt.Rows[0][0].ToString() == "1")
                checkBox1.Checked = true;
            else
                checkBox1.Checked = false;

buna benzer bir kod yazıyoruz genelde değil mi? Ben bunu yazmayı hiç sevemedim. Extension Metodları öğrenmeden öncesinde bile bu işi yapacak bir metod hazırlamıştım. Buradaki dersimde görebilirsiniz. Extension metodları öğrendiğimde bu metodları kullanmak çok daha basit ve güzel oldu.

        public static CheckState ToCheckState(this object value)
        {
            CheckState cs = new CheckState();
            switch (value.ToString())
            {
                case "0":
                    cs = CheckState.Unchecked;
                    break;
                case "false":
                    cs = CheckState.Unchecked;
                    break;
                case "False":
                    cs = CheckState.Unchecked;
                    break;
                case "Unchecked":
                    cs = CheckState.Unchecked;
                    break;

                case "1":
                    cs = CheckState.Checked;
                    break;
                case "true":
                    cs = CheckState.Checked;
                    break;
                case "True":
                    cs = CheckState.Checked;
                    break;
                case "Checked":
                    cs = CheckState.Checked;
                    break;

                case "Indeterminate":        
                    cs = CheckState.Indeterminate;// içi dolu checkbox ne tick var ne boş             
                    break;
                default:
                    cs = CheckState.Indeterminate;// içi dolu checkbox ne tick var ne boş             
                    break;
            }
            return cs;
        }

Kullanımı ise,

       private void btn_isaretle_Click(object sender, EventArgs e)
        {
            string str = "1";
            checkBox1.CheckState = str.ToCheckState();

            str = "true";
            checkBox2.CheckState = str.ToCheckState();

            str = "True";
            checkBox3.CheckState = str.ToCheckState();

            str = "Checked";
            checkBox4.CheckState = str.ToCheckState();

            str = "Indeterminate";
            checkBox5.CheckState = str.ToCheckState();

            str = "0";
            checkBox6.CheckState = str.ToCheckState();

            str = "False";
            checkBox7.CheckState = str.ToCheckState();

            str = "false";
            checkBox8.CheckState = str.ToCheckState();

            str = "Unchecked";
            checkBox9.CheckState = str.ToCheckState();
        }

Görüntüsüne bakalım.

c# extension methods

gördüğünüz gibi checkstate durumu sağlayacak tüm değerleri bu metoda dahil ettikten sonra gönül rahatlığı ile checkbox’a yansıtılacak veri ne türde bir bool dönüşümü yapılacak bir değer olursa olsun işe yarayacaktır.

En basit örnek olarak (SQL de checkbox’a yansıtılması gereken verinin aşağıdakiler gibi olduklarını varsayalım.)

“Aktif” = Checked, “Pasif” = Unchecked

“Doğru” = Checked, “Yanlış” = Unchecked

“Var” = Checked, “Yok” = Unchecked

“Evet” = Checked, “Hayır” = Unchecked

“Dolu” = Checked, “Boş” = Unchecked

Bu tarz değerler daha da çoğaltılabilir. Temelde bu değerlerin hepsi mantıksal doğrulama temelidir.

Bunlar dışında başka extension metod yazmadım. Aklımda bir çok metod olsa da oturuo yazmaya üşendiğimden vazgeçiyorum. Diğer yandan önce bana lazım olmasını da bekliyorum. Yani aklımdaki metod İLERİDE işe yarayabilir. Ben de yazmak için o İLERİ’nin gelmesini bekliyorum. :D :D

Bazı adamlar toplanmış ve bu iş için bir site açmışlar.

http://www.extensionmethod.net/csharp

Site bu. Bu siteye girip onlarca extension metod bulabilir ve işinize yarayanı kullanabilirsiniz.

C# Extension Methods – Genişletme Metodları #1

C# Extension Methods – Genişletme Metodları #2


C# Extension Methods – Genişletme Metodları #3, dersimizde bu kadar arkadaşlar. Diğer derslerimizde görüşmek üzere…

C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.

Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz…Bu dersimi ve Diğer partların hepsini Github projemde tek bir klasör içerisinde tutacağım.

Sağlıcakla ve takipte kalın. ;)

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)