PDA

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



irpersian20
یک شنبه 03 شهریور 1392, 20:15 عصر
سلام
برای دریافت تعداد پارامتر اختیاری به شکل باید عمل کرد؟ در جاوا و سی پلاس پلاس پیدا کردم

mousa1992
یک شنبه 03 شهریور 1392, 21:02 عصر
این لینکو ببین (http://msdn.microsoft.com/en-us/library/ms228391%28v=vs.90%29.aspx)

برای این کار باید از کلمه کلیدی params استفاده کنی و توجه داشته باش که تو هر متد فقط یک بار میشه ازش استفاده کرد و باید به عنوان اخرین پارامتر تعریف بشه

و اینم نمونه ای که توی لینک هست



class TestParams
{
private static void Average(string title, params int[] values)
{
int sum = 0;
System.Console.Write("Average of {0} (", title);

for (int i = 0; i < values.Length; i++)
{
sum += values[i];
System.Console.Write(values[i] + ", ");
}
System.Console.WriteLine("): {0}", (float)sum / values.Length);
}
static void Main()
{
Average("List One", 5, 10, 15);
Average("List Two", 5, 10, 15, 20, 25, 30);
}
}



موفق باشی

مهرداد صفا
یک شنبه 03 شهریور 1392, 21:35 عصر
با سلام.
1- آرگومنتی که قصد دارید به عنوان optional یا اختیاری در نظر بگیرید را در هنگام تعریف تابع مقدار دهید:

DialogResult MsgBox(string text, string title ="default title")
{
return MessageBox.Show(text, title);
}



با این محدودیت ها:
-بعد از آرگومنت(های) اختیاری نباید آرگومنت ضروری تعریف شود.
-تنها از constant ها و یا value type برای مقدار پیشفرض استفاده شود.

2- از OptionalAttribute استفاده کنید:

DialogResult MsgBox2(string text,
[System.Runtime.InteropServices.Optional]string title)
{
if (title == null ) title = "default title";
return MessageBox.Show(text, title);
}

3- پیشنهاد می کنم از overload به جای optional argument استفاده کنید تا کد خوانا تری داشته باشید:

DialogResult MsgBox3(string text)
{
return MessageBox.Show(text,"default title");
}

DialogResult MsgBox3(string text, string title)
{
return MessageBox.Show(text, title);
}

مثال کامل:

//in the name of god
//اللهم صل علی محمد و آل محمد

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
MsgBox("hello world!");
MsgBox2("hello world!");
MsgBox3("hello world!");
}

DialogResult MsgBox2(string text,
[System.Runtime.InteropServices.Optional]string title)
{
if (title == null ) title = "default title";
return MessageBox.Show(text, title);
}

DialogResult MsgBox(string text, string title ="default title")
{
return MessageBox.Show(text, title);
}

DialogResult MsgBox3(string text)
{
return MessageBox.Show(text,"default title");
}

DialogResult MsgBox3(string text, string title)
{
return MessageBox.Show(text, title);
}
}
}

irpersian20
دوشنبه 04 شهریور 1392, 08:29 صبح
سلام
تمایل به استفاده از آرایه نیست. آیا چیزی مثل کد زیر نداریم؟
int... n

mousa1992
دوشنبه 04 شهریور 1392, 11:45 صبح
نه من ندیدم چنین چیزی

ahmadreza517
دوشنبه 04 شهریور 1392, 17:46 عصر
سلام

چنین چیزی نیست.پارامتر با out تعریف کن.مثال از نت پیدا کن

Hajivandian
دوشنبه 04 شهریور 1392, 19:38 عصر
سلام،

چنین چیزی هست!

برای استفاده از پارامترهای اختیاری به عنوان ورودی توابع سه راه وجود دارد:
1- استفاده از کلمه کلیدی params که دوستان اشاره کردن.
2- استفاده از مقدار پیش فرض برای آرگومان ها.
3- Overloading

روش دوم: به عنوان مثال تابع زیر را در نظر بگیرید:


public void SampleMethod(int a=0, string b="")
{
// ....
}


تابع فوق به روش های مختلفی قابل فراخوانی است:


SampleMethod();

SampleMethod( 20 );

SampleMethod( 20, "Salam" );

SampleMethod( b: "Khobi!" );

ho3ein.3ven
دوشنبه 04 شهریور 1392, 19:41 عصر
سلام . تابع رو سربارگذاری کن .

mehdi.mousavi
دوشنبه 04 شهریور 1392, 21:13 عصر
سلام تمایل به استفاده از آرایه نیست. آیا چیزی مثل کد زیر نداریم؟ int... n

سلام.
منظورتون از "تمایل به استفاده از آرایه نیست" چیه؟ اون int n, ... که نوشته اید، Syntax
Variable Argument ها در C++ هستش. همون کار، در C# با استفاده از params و بشکلی که
mousa1992 گفتن انجام میشه. حالا یعنی چی تمایلی به استفاده از آرایه نیست؟ :) دوست دارید
Syntax زبان رو تعییر بدید؟؟؟

موفق باشید.