من رفتم سربازی اگر محتوای منو دوست داشتید و بدردتون خورد از من حمایت مالی کنید

آموزش سی شارپ – توابع

آموزش سی شارپ - توابع
آموزش سی شارپ - توابع

آموزش سی شارپ – توابع

در این بخش از دوره آموزشی سی شارپ قصد بررسی توابع و پارامترهای ورودی به آن‌ها را داریم.

آموزش سی شارپ توابع

حتما قبل از بررسی توابع در سی شارپ نوشته‌ی مطالب قبلی این دوره‌ی آموزشی را با هشتگ #دوره آموزشی_سی_شارپ در سایت ما را مطالعه کنید.

 

استفاده از پارامترهای ref و out

برای تغییر در پارامترهای ورودی که متد دریافت می‌کند می‌توانید از کلمات کلیدی ref و out استفاده کنید. می‌توانید value type را توسط reference ارسال کنید. این‌کار به متد این امکان را می‌دهد تا بتواند argument را تغییر دهد.

دو دلیل برای این‌کار وجود دارد:
  • اجازه دادن به متد تا بتواند محتوای argumentاش را تغییر دهد.
  • اجازه دادن به متد برای اینکه بتواند بیش‌تر از یک مقدار را return کند.
class RefTest
{
   // This method changes its argument. Notice the use of ref.
   public void Sqr(ref int i)
   {
      i = i * i;
   }
}

// Using :
RefTest ob = new RefTest();
int a = 10;
Console.WriteLine("a before call: " + a);
ob.Sqr(ref a); // notice the use of ref
Console.WriteLine("a after call: " + a);

نکته‌ی مهم در مورد ref این است که argument‌ای که از طریق ref ارسال می‌شود باید یک متغیراز پیش تعریف شود. به این دلیل که پارمتر مطمئن شود مقداری که دریافت می‌کند، مقداری معتبر است. بنابراین نمی‌توانید مستقیماً مقدار ثابت را در argument بنویسید.

 

معرفی out Parameter Modifier

پارامتر out مشابه پارامتر ref است با این تفاوت که پارامتر out فقط مقداری را از متد باز می‌گرداند و اطلاعات ارسالی به متد ندارد. نیازی نیست متغیری که به‌عنوان out argument به‌کار می‌رود، در قسمت فراخوانی متد، مقداردهی اولیه شود. چرا که متد، خودش یک مقدار را به آن متغیر می‌دهد. درون متد، پارامتر out به‌صورت unassigned در نظر گرفته شده است. یعنی که فرض بر این است متغیر مربوطه مقداردهی اولیه نشده است و متد باید خودش مقداری را به متغیر اختصاص دهد.

static void Method(out int i)
{
   i = 44;
}

// Using :
int value;
Method(out value);

یکی دیگر از کاربردهای out این است که متد به‌جای یک خروجی، چند خروجی داشته باشد.

static void MyMethod(out int i, out string s1, out string s2)
{
   i = 180;
   s1 = "I've been returned.";
   s2 = "This example uses out to return three variables.";
}

// Using :
int i;
string str1, str2;
MyMethod(out i, out str1, out str2);
Console.WriteLine(i);
Console.WriteLine(str1);
Console.WriteLine(str2);

از ref و out می‌توان هنگام فرستادن reference نیز استفاده کرد، این کار به یک متد اجازه می‌دهد. تا بتواند reference ای که به شیء‌ای رجوع کرده را تغییر دهدتا به شیء دیگری رجوع کند.

class Swap
{
   int a, b;
   public Swap(int a, int b)
   {
      this.a = a;
      this.b = b;
   }
   public void swapping(ref Swap ob1, ref Swap ob2)
   {
      Swap t;
      t = ob1;
      ob1 = ob2;
      ob2 = t;
   }
   public void Show()
   {
      Console.WriteLine("a = {0}, b = {1}", a, b);
   }
}

// Using :
Swap swapRef1 = new Swap(2, 3);
Swap swapRef2 = new Swap(4, 5);
swapRef1.Show();
swapRef2.Show();
swapRef1.swapping(ref swapRef1, ref swapRef2);
swapRef1.Show();
swapRef2.Show();

بعد از فراخوانی ()swapping متغیر swapRef1 به شیء‌ای با مقادیر ۴ و ۵ ومتغیر swapRef2 به شیء‌ای با مقادیر ۲ و ۳ رجوع می‌کند. اگر ref را حذف کنید تغییرات اعمال شده فقط درون متد ()Swap می‌ماند و در بیرون از متد تاثیری ندارد.

 

استفاده از argument به تعداد دلخواه

گاهی ممکن است در شرایط مختلف تعداد argument متفاوت شود و حد و مرزی نداشته، برای این منظور باید از کلمه‌ی کلیدی params استفاده کنید؛ params modifier برای تعریف آرایه‌ای از پارامترها به‌کار می‌رود که می‌تواند صفر یا بیش‌تر از صفر argument را دریافت کند. سایز این آرایه با توجه به تعداد argument‌هایی که به متد داده شده تعیین می‌شود.

class ParamTest
{
   public double Average(params double[] nums)
   {
      double result = 0;
      for (int i = 0; i < nums.Length; i++)
      {
         result += nums[i];
      }
      return result / nums.Length;
   }
}

// Using
ParamTest ob = new ParamTest();
Console.WriteLine(ob.Average(2, 3, 5, 6));
Console.WriteLine(ob.Average(2, 3.5));
double[] myArray = { 5, 8, 6, 12, 15.5, 7 };
Console.WriteLine(ob.Average(myArray));

این جلسه هم به پایان رسید منتظر نظرات شما هستیم.

برای استفاده از تمامی جلسات از هشتگ #دوره آموزشی_سی_شارپ در سایت ما استفاده کنید.

منتظر جلسه‌ی بعدی دوره آموزشی سی شارپ بمانید.

برای امتیاز به این نوشته کلیک کنید!
[کل: 0 میانگین: 0]