توابع تعميم يافته
يکي از قابليت هاي جديد و جالب در عين حال کاربردي در C# توابع تعميم يافته هست . توابع تعميم يافته اين امکان را به برنامه نويس ميدهند تا به يک کلاس (حتي اگر از نوع مهر و موم شده (sealed) باشد) يک يا چند متد (تابع) را اضافه کند که البته اين متد ها (توابع) دسترسي به مقادير خصوصي (private) کلاس ندارند ولي در بعضي مواقع بسيار ميتوانند مفيد باشند . همانطور که در سرتاسر C# از اين مزيت (توابع تعميم يافته) استفاده هاي زيادي شده است براي نمونه يک متغيير از نوع List ايجاد کنيد و يک نگاه به متدهاي آن بندازيد آنها را خوب نگاه کنيد . حالا فضاي نام System.Linq را به پروژه اضافه کنيد و مجددا يک نگاه ديگه به متدها بندازيد ميبينيد که تعداد زيادي متد براي استفاده از Linq به اين متغيير اضافه شده جالبه نه ؟
خبر خوب اينه که به راحتي ميتوانيد از اين قابليت استفاده کنيد . براي مثال فکر کنين که يک تابع جهت تبديل تاريخ ميلادي به شمسي داشته باشيم اين تابع يک مقدار DateTime (تاريخ ميلادي) به عنوان ورودي ميگيرد و يک رشته حاوي تاريخ شمسي به ما برميگرداند
public static string ToShamsi(DateTime value)
{
var pc = new System.Globalization.PersianCalendar();
return pc.GetYear(value) + "/" + pc.GetMonth(value) + "/" + pc.GetDayOfMonth(value);
}
حالا هر کجا که لازم باشه ميشود به صورت زير آنرا فراخواني کرد
var dt = DateTime.Now;
string shamsi = ToShamsi(dt);
Console.WriteLine(shamsi);
آيا بهتر نبود که اين تابع را مستقيما از متغيير dt فرا خواني ميکرديم . براي اين کار کافي است که به صورت زير عمل کنيم ابتدا يک کلاس به صورت زير ايجاد ميکنيم
namespace MyDate{
public static class MyDate
{
public static string ToShamsi(this DateTime value)
{
var pc = new System.Globalization.PersianCalendar();
return pc.GetYear(value) + "/" + pc.GetMonth(value) + "/" + pc.GetDayOfMonth(value);}}}
از اينجا به بعد هرکجا نياز به استفاده از اين قابليت داشتيم کافيه . فضاي نام را اضافه کنيم و به صورت زير عمل کنيم
using MyDate;
. . .
var dt = DateTime.Now;
Console.WriteLine(dt.ToShamsi());
يا اينکه مستقيما به صورت زير عمل کنيم .
Console.WriteLine(DateTime.Now.ToShamsi());
در هر حال استفاده از اين قابليت ميتونه پتانسيل خوبي به برنامه نويس بدهد و با کمي خلاقيت بهره هاي زيادي از اين روش ببرد . همچنان که ميشه با اين روش حجم کد نويسي رو کاهش داد و برنامه نويسي را به سرعت بيشتري انجام داد و کدهاي خوانا و تميز ايجاد کرد .