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

آموزش سی شارپ
آموزش سی شارپ

توابع در سی شارپ

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

 

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

 

استفاده از پارامترهای 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]