C# Extension - Genişletme metotları ile .NET Framework'e ait olan integer veya string tipi için custom bir metot oluşturabiliriz. Ayrıca 3. parti yazılımlarda bulunan sınıflara extension metot yazarak genişletme yapabiliriz. Bu genişletme sırasında ilgili tipin veya sınıfın yapısı bozulmamış olur.
Extension metot oluştururken aşağıdaki özelliklere dikkat etmeliyiz.
Extension metot oluştururken aşağıdaki özelliklere dikkat etmeliyiz.
- Genişletme yapacağımız sınıf ve metot static olarak tanımlanmalıdır.
- Genişletme metodunun ilk parametresinin başına this keywordu eklenmelidir. Bu metodumuzun extension olduğunu bildirir.
- Genişletme metodu kullandığımız değişken ile this keywordü'nü kullandığımız değişkenin tipi aynı olmalıdır.
Örnek Kullanımlar
Matematik fonksiyonları için Math sınıfı mevcuttur. MathExtension isimli bir class, Math sınıfının extension metotlarının bulunacağı yerdir. Extension özelliğinde olacağı için static olarak tanımlandı. Bu sınıfın içerisindeki metotlar da static olarak tanımlandı. Bu metotları istediğimiz yerde kullanmak ve kolay erişebilmek amacıyla static olarak tanımlandı.
this keywordünün mantığı, metodun alacağı parametrenin tipinin, işlem yapacağımız veriyi tutan değişkenden almasıdır.
public static class MathExtension
{
public static double ToSquare(this double input)
{
return input * input;
}
public static double ToCube(this double input)
{
return input * input * input;
}
public static double ToFactorial(this double input)
{
return ((input == 0) || (input == 1)) ? 1 : input * (input - 1).ToFactorial();
}
public static double MultiplyBy(this double input, double multiplyBy)
{
return input * multiplyBy;
}
public static bool IsNegative(this double input)
{
return input < 0 ? true : false;
}
public static bool IsPositive(this double input)
{
return input > 0 ? true:false;
}
MathExtension metodunda oluşturduğumuz Extension metotlarının ne işe yaradığı aşağıdaki şekilde belirtilmiştir.
Bu metotların sonuçları aşağıdaki görselde mevcuttur.
Örnek projenin kodları için tıklayınız.
- ToSquare: Kare alma işlemi yapar.
- ToCube: Küp alma işlemi yapar.
- ToFactorial: Girilen sayının faktöriyelini hesaplar.
- MultiplyBy: this keywordü ile belirtilen sayının başka bir sayı ile çarpımını hesaplar.
- IsNegative: Girilen sayı 0'dan küçük ise negatif olduğunu belirten true değeri döndürür.
- IsPositive: Girilen sayı 0'dan büyük ise pozitif olduğunu belirten true değeri döndürür.
Bu metotları kullandığımız console uygulamasında ise number isimli double tipinde bir değişken tanımladık. Extension metotlarını kullanırken number değişkeni ile this keywordünü kullandığımız parametrenin veri tipinin aynı olmasına dikkat ettik.
class Program
{
static void Main(string[] args)
{
Console.Write("Enter a number: ");
var number = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Cube: {0} - Square {1} - Factorial {2}", number.ToCube(),number.ToSquare(),number.ToFactorial());
Console.WriteLine("-----------------------------------------");
Console.Write("Multiply With: ");
double multiplyBy = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Result is {0}", number.MultiplyBy(multiplyBy));
Console.WriteLine("-----------------------------------------");
double[] numberList = { 5.2, 7.0, 6.1 };
double result = 1;
foreach (var item in numberList)
{
result = result.MultiplyBy(item);
}
Console.WriteLine("numberList result is {0}", result);
Console.WriteLine("-----------------------------------------");
Console.WriteLine("{0}", number.IsPositive());
Console.WriteLine("{0}", number.IsNegative());
Console.ReadKey();
}
}
Bu metotların sonuçları aşağıdaki görselde mevcuttur.
Girilen ilk sayı number isimli değişkene atanmış(number=5), multiplyBy isimli değişkene ise number ile çarpılacak değişkendir.(multiplyBy=2) numberList ise 3 elemanlı bir dizidir ve MultiplyBy extension metodunun döngüde kullanımını görüyoruz. number değişkeninin küp, kare ve faktöriyel hesaplaması yapılmıştır. IsPositive ve IsNegative metotları ile 5 sayısının kontrolü yapılmaktadır ve bool değer döndürmektedir.
Özetle extension metotları; herhangi bir kütüphanede bulunan sınıfta veya tipte değişiklik yapmadan genişletirken yeni bir özellik katılması bakımından önemli bir konudur.
Örnek projenin kodları için tıklayınız.
Yorumlar
Yorum Gönder