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