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