PDA

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



fazel-d
پنج شنبه 21 خرداد 1388, 21:07 عصر
به عنوان مثال دنبال ساخت متدی هستم که کارش Insert کردن در دیتابیس هست در حالی که این عمل بر روی چندین Table با فیلدهای مختلف انجام می شه.
و در هر عمل Insert ممکن است که روی یک table با 3 فیلد انجام بشه. ویا روی یک table با n فیلد انجام بشه که من فیلدها رو باید به عنوان آرگومان به تابع پاس کنم.

Mahdi.Kiani
جمعه 22 خرداد 1388, 00:39 صبح
در مورد ساخت متد که تعداد آرگومان های متفائتی بتواند اختیار کند از کلمه کلیدی params استفاده کنید.
تعریف MSDN از Params


The params keyword lets you specify a method parameter that takes an argument where the number of arguments is variable.



مثال از MSDN



// cs_params.cs
using System;
public class MyClass
{

public static void UseParams(params int[] list)
{
for (int i = 0 ; i < list.Length; i++)
{
Console.WriteLine(list[i]);
}
Console.WriteLine();
}

public static void UseParams2(params object[] list)
{
for (int i = 0 ; i < list.Length; i++)
{
Console.WriteLine(list[i]);
}
Console.WriteLine();
}

static void Main()
{
UseParams(1, 2, 3);
UseParams2(1, 'a', "test");

// An array of objects can also be passed, as long as
// the array type matches the method being called.
int[] myarray = new int[3] {10,11,12};
UseParams(myarray);
}
}






1
2
3

1
a
test

10
11
12


اما در مورد نمونه مثالی که زدید، می توانید به کلاس SqlHelper مراجعه کنید. (در مورد این کلمه در google جستجو کنید)

Reza_Yarahmadi
جمعه 22 خرداد 1388, 01:45 صبح
این تیکه مقاله رو نمیدونم از کجا پیدا کردم ولی اینجا میذارم شاید بدردت بخوره!

گاهي از اوقات نياز است تا تابعي تعريف كنيم كه تعداد آرگومانهاي آن متغير باشند .براي اين منظور از كلمه ي كليدي params استفاده مي شود.
دونكته در اينجا حائز اهميت است:
1- در هر تابعي تنها مي توان يكبار از params استفاده كرد.
2- پس از بكار بردن params ديگر نمي توان هيچ آرگوماني را تعريف كرد.

يكي از مثالهايي كه در اين زمينه مي توان ارائه داد استفاده از آرايه ها به عنوان آرگومان ورودي است. در اين حالت يا مي توان يك آرايه را به صورت كامل به تابع معرفي كرد و يا تنها نام آنرا به تابع پاس كرد. مثال زير را ملاحظه كنيد :



using System;

namespace ex17
{
class Class1
{
public static void UseParams(params int[] list)
{
for ( int i = 0 ; i < list.Length ; i++ )
Console.WriteLine(list[i]);
Console.WriteLine();
}

[STAThread]
static void Main(string[] args)
{
UseParams(1, 2, 3);

int[] myarray = new int[3] {10,11,12};
UseParams(myarray);

Console.ReadLine();

}
}
}


توضيحي در مورد كد فوق :

1- در تابع main به دو صورت از تابع UseParams ما استفاده شده است. يا اينكه خيلي ساده هر تعداد آرگومان را مي توان به تابع فرستاد و يا اينكه در ادامه آرايه ايي رسما تعريف و سپس به تابع فرستاده شود.

pesar irooni
جمعه 22 خرداد 1388, 03:03 صبح
میتونی از OverLoading یا چند ریختی (از مباحث مهم شی گرایی) استفاده کنی. یعنی یه متد با یه نام و یه مقدار برگشتی رو چندین بار با پارامترهای مختلف و البته در صورت نیاز با کارهای مختلف تعریف کنی.