PDA

View Full Version : مختصری در مورد ژنریک ها



uthman
سه شنبه 18 تیر 1392, 16:15 عصر
یکی از امکانات سی شارپ اینه که اجازه میده یه متد رو چند بار بنویسی البته به شرطی که نوع آرگومان ها با هم متفاوت باشن.
به مثال زیر توجه کنید.
فرض کنید تابعی نوشته ایم که محتوای دو متغییر رو با هم عوض می کنه به شکل زیر:
static void change(ref int x,ref int y)
{
int tmp = x;
x = y;
y = tmp;
}
وقتی که بخواهیم فراخوانی کنیم به شکل زیر:

int a = 12;
int b = 20;
change(ref a, ref b);

نکته ای که باید به اون توجه داشته باشید اینه که باید نوع پارامتر ها با نوع آرگومانها یکی باشن.
خوب برنامه بالا به درستی کار میکنه.
حالا فرض کنیم تو برنامه دوباره نیاز داریم متدی بنویسیم که جای دو متغییر رشته ای رو عوض کنه.اگه با نوع های ژنریک آشنایی نداشته باشید به روش زیر عمل می کنید و یه بار دیگه تابع بالا رو مینویسید و به int ها رو به string تغییر میدین.به شکل زیر

static void changestring(ref string x,ref string y)
{
string tmp = x;
x = y;
y = tmp;
}


و در موقع فراخوانی از روش زیر مثل قبل استفاده میکنید

string a = "Uthman";
string b = "rahimi";
changestring(ref a, ref b);

خوب کدهایی بالا هیچ مشکلی ندارن و به خوبی اجرا میشن.
ولی باید به این نکته توجه کنید که برنامه نویس با تجربه کسیه که کارهارو با کمترین کد بنویسه
اگه بخوایم برای عوض کردن دو مقدار boolو object و ... هر کدوم دو متد بنویسیم ....
با نوع های ژنریک شما می توانید یک بار متد رو بنویسید و بسته برای هر نوع داده ای که خواستید می تونید فراخوانیش کنید به روش زیر:

static void change<T>(ref T a,ref T b)
{
T temp;
temp = a;
a = b;
b = temp;
}

و در موقه فراخوانی به روش زیر عمل می کنیم:
change<string>(ref a, ref b);
و یا برای نوع داه int به روش زیر:
change<int>(ref a, ref b);

توضیحات :متد change<T> می تواند بر روی دو پارامتر ورودی از نوع <T> عمل کند
خواستم با یه پروژه کوچیک و ساده دوستان رو به مبحث ژنریک ها علاقه مند کنم.چون از مباحث مهم C#‎ هست.اابته ژنریک ها فقط به این مثال بالا ختم نمیشه و خیلی از این گسترده تر و کاربردی تره.

Shahram_12
سه شنبه 18 تیر 1392, 17:59 عصر
متشکر از توضیحات ارائه شده اگر همینطور پیش بری و کاملش کنی متشکر میشم