PDA

View Full Version : سوال: ایجاد متدی با تعداد پارامتر دلخواه



mehdy.programmer
چهارشنبه 07 تیر 1391, 20:58 عصر
با سلام خدمت اساتید و دوستان عزیز!

همتون که با این کد آشنایی دارن:

MessageBox.Show("string text","string Caption",MessageBoxButtons,MessageBoxIcon,MessageBoxDefaul tButton,MessageBoxOptions...);

متد show می تونه یه پارامتر بگیره یا هر چند تای دیگه!

می خواستم بدونم چطور یه متدی بنویسیم که پارامتر هاش دلخواه(optional) باشه؟؟

با تشکر

2arash2
چهارشنبه 07 تیر 1391, 21:02 عصر
با سلام خدمت اساتید و دوستان عزیز!

همتون که با این کد آشنایی دارن:

MessageBox.Show("string text","string Caption",MessageBoxButtons,MessageBoxIcon,MessageBoxDefaul tButton,MessageBoxOptions...);

متد show می تونه یه پارامتر بگیره یا هر چند تای دیگه!

می خواستم بدونم چطور یه متدی بنویسیم که پارامتر هاش دلخواه(optional) باشه؟؟

با تشکر

تو C#‎‎ شما می تونید چندین متد با نام های یکسان تعریف کنید،به شرط اینکه تعداد آرگومنت متفاوت یا نوع آرگومنتی که میگیرن متفاوت باشد،

mehdy.programmer
چهارشنبه 07 تیر 1391, 21:14 عصر
دستت درد نکنه!

پس تمام متد های که تو C# این طوری هستند در واقع چند متد متفاوت اند!!!
یعنی فقط همین راه وجود داره؟

2arash2
چهارشنبه 07 تیر 1391, 21:18 عصر
دستت درد نکنه!

پس تمام متد های که تو C# این طوری هستند در واقع چند متد متفاوت اند!!!
یعنی فقط همین راه وجود داره؟
تا جایی که بنده میدونم بله،منتهاش نه اینکه در همه این متد ها یک سری کد تکراری قرار بگیره،بلکه خود این متدها از یک متد private که باهاش هم کلاسه استفاده میکنن که کار اصلی رو اون انجام میده.

hamed_hossani
چهارشنبه 07 تیر 1391, 22:56 عصر
سلام
شما یک کلاس تعریف کنید و متد های خود را با توجه به نیازتون در ان وارد کنید
message("title","content");//2
message("title","contetnt",icon);//3
کامپوننتی که messageBox فارسی را دارد هم بر همین اساس نوشته شده!
یعنی به وسیله کد form ساختن و درون ان label و button قرار دادن و براساس پارامتر متد اون فرم را تغییراتی می دهند.

drstrike
پنج شنبه 08 تیر 1391, 01:05 صبح
با سلام خدمت اساتید و دوستان عزیز!

همتون که با این کد آشنایی دارن:

MessageBox.Show("string text","string Caption",MessageBoxButtons,MessageBoxIcon,MessageBoxDefaul tButton,MessageBoxOptions...);

متد show می تونه یه پارامتر بگیره یا هر چند تای دیگه!

می خواستم بدونم چطور یه متدی بنویسیم که پارامتر هاش دلخواه(optional) باشه؟؟

با تشکر
به این حالت اصطلاحا میگن Overload؛ یعنی نوشتن یک متد با لیست پارامترهای مختلف که برنامه نویس به دلخواه یکی از اون حالتهارو انتخاب میکنه.
بعنوان مثال همون متد Show از کلاس MessageBox رو نگاه کنید، پرانتز باز رو که بعد Show بزارید یه راهنما میاد که نوشه "1of 21" یعنی این متد به 21 حالت مختلف نوشته شده که با زدن کلید "جهت پایین" می تونید تمام حالتها رو بررسی و انتخاب کنید.

موفق باشید

Mahmoud.Afrad
پنج شنبه 08 تیر 1391, 05:10 صبح
به این حالت اصطلاحا میگن Overload؛ یعنی نوشتن یک متد با لیست پارامترهای مختلف که برنامه نویس به دلخواه یکی از اون حالتهارو انتخاب میکنه.

البته نوشتن یک متد نیست که صرفا پارامترهای مختلفی داشته باشه.
نوشتن چند متد با نام یکسان است اما با تعداد و یا نوع پارامترهای متفاوت و یا حتی تفاوت در داشتن یا نداشتن مقدار بازگشتی و یا تفاوت در نوع مقدار بازگشتی از متد.

majidrezaei2007
پنج شنبه 08 تیر 1391, 12:37 عصر
این بحث overload هست . وقتی بحث یک متد با تعداد پارامتر دلخواه پیش میاد همه ذهنشون میره سمت overloading . در صورتی که overloaind نوشتن چند متد با انواع مختلف پارامتر هاست که میتونه تعدادشون هم فرق کنه . برای نوشتن فقط یک متد (و نه چند متد) با تعداد پارامتر دلخواه از کلمه کلیدی params استفاده می کنیم . به این صورت یک آرایه تعریف میشه که کاربر هرچی پارامتر بزنه میاد تو اون آرایه . مثال : متدی که هر تعداد عدد از نوع int را دریافت و مجموع آنها رو بر می گرداند .

public int Sum(params int[] numbers)
{
int s = 0;
for (int i = 0; i < numbers.Length; i++)
{
s += numbers[i];
}
return s;
}

حالا تو برنامه می تونیم اینطوری استفاده کنیم :

int n = Sum(2, 3, 4, 5);
MessageBox.Show(n.ToString());
n = Sum(10, 11);
MessageBox.Show(n.ToString());
n = Sum(12, 13, 14, 15, 16, 17, 18, 19, 20);
MessageBox.Show(n.ToString());

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

mehdy.programmer
پنج شنبه 08 تیر 1391, 14:32 عصر
دست همتون درد نکنه! خیلی جواب های خوبی بود!
خصوصا این دو جواب که خیلی خوشم اومد ازش :لبخند:

البته نوشتن یک متد نیست که صرفا پارامترهای مختلفی داشته باشه.
نوشتن چند متد با نام یکسان است اما با تعداد و یا نوع پارامترهای متفاوت و یا حتی تفاوت در داشتن یا نداشتن مقدار بازگشتی و یا تفاوت در نوع مقدار بازگشتی از متد.
و جواب:

این بحث overload هست . وقتی بحث یک متد با تعداد پارامتر دلخواه پیش میاد همه ذهنشون میره سمت overloading . در صورتی که overloaind نوشتن چند متد با انواع مختلف پارامتر هاست که میتونه تعدادشون هم فرق کنه . برای نوشتن فقط یک متد (و نه چند متد) با تعداد پارامتر دلخواه از کلمه کلیدی params استفاده می کنیم . به این صورت یک آرایه تعریف میشه که کاربر هرچی پارامتر بزنه میاد تو اون آرایه . مثال : متدی که هر تعداد عدد از نوع int را دریافت و مجموع آنها رو بر می گرداند .

1
2
3
4
5
6
7
8
9
public int Sum(params int[] numbers)
{
int s = 0;
for (int i = 0; i < numbers.Length; i++)
{
s += numbers[i];
}
return s;
}


حالا تو برنامه می تونیم اینطوری استفاده کنیم :

1
2
3
4
5
6
int n = Sum(2, 3, 4, 5);
MessageBox.Show(n.ToString());
n = Sum(10, 11);
MessageBox.Show(n.ToString());
n = Sum(12, 13, 14, 15, 16, 17, 18, 19, 20);
MessageBox.Show(n.ToString());


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

tooraj_azizi_1035
پنج شنبه 08 تیر 1391, 18:30 عصر
سلام
به مبحث Named and Optional Arguments (http://msdn.microsoft.com/en-us/library/dd264739.aspx) رجوع کنید.

public void ExampleMethod(int required, string optionalstr = "default string",
int optionalint = 10)