با سلام
گاهی اوقات پیش می آید که ما نیاز پیدا می کنیم که به یک شی یا نوع از پیش تعریف شده یک متد اضافه کنیم اما نمی خواهیم کل آن شی یا نوع را از اول پیاده سازی کنیم. البته این کار بصورت استاتیک انجام می شود. حتما برای شما پیش آمده که از متد IsNullOrEmpty() از نوع داده string برای خالی بودن یک متغیر رشته ای استفاده کرده باشید. حالا شما دوست دارید که یک متد به نوع داده string اضافه کنید بدون اینکه کل نوع داده را از اول پیاده سازی کنید. ما می خواهیم دو متد اضافه کنیم یک این که چک کند که تمام حروف رشته بزرگ هست یا نه و دیگر چک کند که تمام حروف رشته کوچک هست یا نه می باشد. ما برای انجام این کار باید از extension استفاده کنیم. و اینجاست که باید در پارامتر متد مورد نظرمون از this استفاده کنیم و بگوییم که ورودی ما خود یک کلاس یا یک نوع داده هست نه یک مقدار یا یک شی.
using System;
static class Extensions
{
public static bool IsUpper(this string value)
{
// Consider string to be uppercase if it has no lowercase letters.
for (int i = 0; i < value.Length; i++)
{
if (char.IsLower(value[i]))
{
return false;
}
}
return true;
}
public static bool IsLower(this string value)
{
// Consider string to be lowercase if it has no uppercase letters.
for (int i = 0; i < value.Length; i++)
{
if (char.IsUpper(value[i]))
{
return false;
}
}
return true;
}
}
class Program
{
static void Main()
{
Console.WriteLine("test".IsLower()); // True
Console.WriteLine("test".IsUpper());
Console.WriteLine("Test".IsLower());
Console.WriteLine("Test".IsUpper());
Console.WriteLine("TEST3".IsLower());
Console.WriteLine("TEST3".IsUpper()); // True
}
}
خروجی برنامه:
True
False
False
False
False
True
با تشکر