C# 3.0 ile gelen Extension Method desteğini çok kullanışlı bulduğum için, kendi uygulamalarımda kullanmaya çalışıyorum. Bu yazımda faydalı bulduğum birkaç Extension Method‘u toplamaya çalıştım.
Metni Encrypt - Decrypt Eden Extension Method
namespace ExtensionManager { public static class Extensions { public static string Encrypt(this string stringToEncrypt, string key) { if (string.IsNullOrEmpty(stringToEncrypt)) throw new ArgumentException(“Boş metin şifrelenemez”); if (string.IsNullOrEmpty(key)) throw new ArgumentException(“Şifreleme için anahtar vermelisiniz”);
        CspParameters cspp = new CspParameters();
        cspp.KeyContainerName = key;
        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspp);
        rsa.PersistKeyInCsp = true;
        byte[] bytes = rsa.Encrypt(UTF8Encoding.UTF8.GetBytes(stringToEncrypt), true);
        return BitConverter.ToString(bytes);
    }
    public static string Decrypt(this string stringToDecrypt, string key)
    {
        if (string.IsNullOrEmpty(stringToDecrypt))
            throw new ArgumentException("Beş metnin şifresi çözülemez");
        if (string.IsNullOrEmpty(key))
            throw new ArgumentException("Şifre çözme için anahtar vermelisiniz");
        string result = null;
        try
        {
            CspParameters cspp = new CspParameters();
            cspp.KeyContainerName = key;
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspp);
            rsa.PersistKeyInCsp = true;
            string[] decryptArray = stringToDecrypt.Split("-");
            byte[] decryptByteArray = Array.ConvertAll<string, byte>(decryptArray, (s => Convert.ToByte(byte.Parse(s, NumberStyles.HexNumber))));
            byte[] bytes = rsa.Decrypt(decryptByteArray, true);
            result = UTF8Encoding.UTF8.GetString(bytes);
        }
        catch()
        {
        }
        return result;
    }
} }</pre>
Örnek kullanım;
string metin = "My Secret";
string sifrelenmis = metin.Encrypt("sifreleyici");
string sifresicozulmus = sifrelenmis.Decrypt("sifreleyici");Listeler üzerinde Foreach Yapan Extension Method
namespace ExtensionManager
{
    public static class Extensions
    {
        public static void ForEach<T>(this IEnumerable<T> kaynak, Action<T> islem)
        {
            foreach (var item in kaynak)
                islem(item);
        }
    }
}Örnek kullanım;
List<string> isimler = new List<string> { "engin", "polat", "ahmet", "mehmet", "murat" };
isimler.ForEach(isim => MessageBox.Show(isim));İnternet Adresi Doğrulayan Extension Method
namespace ExtensionManager
{
    public static class Extensions
    {
        public static bool IsValidUrl(this string text)
        {
            Regex r = new Regex(@"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?");
            return r.IsMatch(text);
        }
    }
}Örnek kullanım;
string Adres = "http://www.enginpolat.com"; bool AdresDogru = Adres.IsValidUrl();
Email Adresi Doğrulayan Extension Method
namespace ExtensionManager
{
    public static class Extensions
    {
        public static bool IsValidEmail(this string text)
        {
            Regex r = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
            return r.IsMatch(text);
        }
    }
}Örnek kullanım;
string Adres = "test@test.com"; bool AdresDogru = Adres.IsValidEmail();
Klasör Oluşturan Extension Method
namespace ExtensionManager
{
    public static class Extensions
    {
        public static void CreateDirectory(this DirectoryInfo dirInfo)
        {
            if (dirInfo.Parent != null)
                CreateDirectory(dirInfo.Parent);
            if (!dirInfo.Exists)
                dirInfo.Create();
        }
    }
}Örnek kullanım;
var dir = new DirectoryInfo(@"C:\temp\bir\iki\uc"); dir.CreateDirectory();
Tarihin Haftasonuna Geldiğini Doğrulayan Extension Method
namespace ExtensionManager
{
    public static class Extensions
    {
        public static bool IsWeekend(this DateTime value)
        {
            return (value.DayOfWeek == DayOfWeek.Sunday || value.DayOfWeek == DayOfWeek.Saturday);
        }
    }
}Örnek kullanım;
for (DateTime date = BaslangicTarih; date <= BitisTarih; date = date.AddDays(1))
{
    if (date.IsWeekend())
        continue;
    /// Tatil değil, yapılacak işler yapılır.
}Object türünden JSON’a, JSON’dan Object Türüne Çeviren Extension Method
namespace ExtensionManager
{
    public static class Extensions
    {
        public static string ToJson(this object obj)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            return serializer.Serialize(obj);
        }
        public static T FromJson<T>(this object obj)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            return serializer.Deserialize<T>(obj as string);
        }
    }
}Örnek kullanım;
Personel Engin = new Personel("Engin Polat", 5000);
string json = Engin.ToJson();
Engin = null;
Engin = s.FromJson<Personel>();Tarihten Yaş Hesaplayan Extension Method
namespace ExtensionManager
{
    public static class Extensions
    {
        public static int Age(this DateTime tarih)
        {
            DateTime now = DateTime.Now;
            int yas = now.Year - tarih.Year;
            if (now < tarih.AddYears(yas))
                yas--;
            return yas;
        }
    }
}Örnek kullanım;
DateTime AhmetDogumGunu = new DateTime(1979, 05, 07); int Yas = AhmetDogumGunu.Age();
Ayın İlk Gününü - Ayın Son Gününü Bulan Extension Method
namespace ExtensionManager
{
    public static class Extensions
    {
        public static DateTime FirstDayOfMonth(this DateTime date)
        {
            return new DateTime(date.Year, date.Month, 1);
        }
        public static DateTime LastDayOfMonth(this DateTime date)
        {
            return new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(1).AddDays(-1);
        }
    }
}Örnek kullanım;
DateTime Simdi = DateTime.Now;
MessageBox.Show("Ayın ilk günü: " + Simdi.FirstDayOfMonth().ToShortDateString());
MessageBox.Show("Ayın son günü: " + Simdi.LastDayOfMonth().ToShortDateString());Dosyanın MD5 Değerini Hesaplayan Extension Method
namespace ExtensionManager
{
    public static class Extensions
    {
        public static string GetMD5(this string filename)
        {
            string result = string.Empty;
            try
            {
                MD5CryptoServiceProvider md5Provider = new MD5CryptoServiceProvider();
                FileStream fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                byte[] arrByteHashValue = md5Provider.ComputeHash(fileStream);
                fileStream.Close();
                string hashData = BitConverter.ToString(arrByteHashValue).Replace("-", "");
                result = hashData;
            }
            catch()
            {
            }
            return result.ToLower();
        }
    }
}Örnek kullanım;
string Dosya = @"C:\Temp\DosyaAdi.txt"; MessageBox.Show(Dosya + " dosyasının MD5 değeri: " + Dosya.GetMD5());
Senior Software Engineer, @Microsoft
Ada ve Ege'nin babası ;)
Makale Adedi: 484