کلیدواژه Ref و Out در سی شارپ

با نام و یاد خدا
در آموزش امروز میخواهیم با دو مفهوم کلیدواژه Ref و Out و توابع OverLoad در سی شارپ آشنا شویم.

مثال اول

قبل از این که دستور Ref,Out را بررسی کنیم یک مثال از  زندگی روزمره افراد را بیان می کنیم تا مفهوم این مبحث بهتر جا بیفتد.

یک پیر زن را در نظر می گیریم که می خواهد یک کیک تولد تهیه کند برای تهیه کیک تولد 2 کیلو خامه را با خود به مغازه شیرینی پزی می برد و از مغازه دار می خواهد که این خامه ها را بگیرد و از آن خامه برای او کیک تولد درست کند، مغازه دار قبول نمی کند و می گوید که این خامه ها  پیش خودتان باشد ما برای شما یک کیک تولد درست می کنیم .

مغازه دار به شیرینی پز سفارش یک کیک تولد می دهد و شیرینی پز یک کیک تولد برای این پیر زن خلق می کند  و در نهایت این پیرزن یک کیک تولد دارد به اضافه 2 کیلو خامه که خودش خریداری کرده بود .

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

به این مدل می گویند ارسال value به تابع

 

public void birthdaycake(int Creamy)

{
            Creamy = 3;//مقدار خامه ای که کیک پز داخل کیک استفاده کرده است
            label2.Text = ” مقدار خامه ای که شیرینی پز داخل کیک تولد استفاده کرده است ” + ” = ” + Creamy.ToString();

}

private void Form1_Load(object sender, EventArgs e)

{

           int Creamy = 2;//مقدار ورودی که پیر زن با خود دارد 
           birthdaycake(Creamy);
           label1.Text = ” مقدار خامه ای که پیر زن به عنوان ورودی با خود به همراه داشته است ” + ” = ” + Creamy.ToString();

}

کلیدواژه Ref و Out - ارسال value به تابع

مثال دوم

این بار این طوری فرض می کنیم که مغازه دار 2 کیلو خامه پیر زن را قبول می کند .

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

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

به این مدل می گویند مدل Ref  یا مدل رفرنس :یعنی مرجع دارد مرجع آن چه چیزی است ، 2 کیلو خامه ای که پیر زن به عنوان ورودی آورده بود و چه چیزی را بر می گرداند کیک تولدی که شیرینی پز تهیه کرده است .

public void  birthdaycake_ref (ref int Creamy)

{
         Creamy = Creamy + 1;//مقدار خامه ای که کیک پز داخل کیک استفاده کرده است
         label2.Text = ” مقدار خامه ای که شیرینی پز داخل کیک تولد استفاده کرده است ” + ” = ” + Creamy.ToString();

}

private void Form1_Load(object sender, EventArgs e)

{
            int Creamy = 2; //مقدار آورده ای که پیر زن با خود داشت
            birthdaycake_ref (ref Creamy);
            label1.Text = “مقدار خامه ای که پیر زن در نهایت دارد” + ” = ” + Creamy.ToString();

}

کلیدواژه Ref و Out -مدل Ref  یا مدل رفرنس

مثال سوم

این بار این طوری فرض می کنیم  که پیر زن  اصلا هیچ مقدار خامه ندارد اما یک کیک تولد می خواهد .

مغازه دار به شیرینی پز سفارش یک کیک تولد می دهد و از شیرینی پز  می خواهد که یک کیک تولد خلق کند  . شیرینی پز کیک تولدی خلق می کند که ممکن است 3 کیلو خامه داخل کیک تولد استفاده کرده باشد  و در نهایت این پیرزن یک کیک تولدی دارد که داخل این کیک تولد 3 کیلو خامه استفاده شده است بدون اینکه که هیچ گونه آورده ای با خودداشته باشد

به این مدل می گویند مدل Out :تابع وقتی که به صورت Out   تعریف می شود ورودی به خود نمی گیرد و لازم هم نیست که شما مقدار اولیه داشته باشید

public void birthdaycake_out(out int Creamy)

{
            Creamy =3;//مقدار خامه ای که کیک پز داخل کیک استفاده کرده است
            label2.Text = ” مقدار خامه ای که شیرینی پز داخل کیک تولد استفاده کرده است ” + ” = ” + Creamy.ToString();

}

private void Form1_Load(object sender, EventArgs e)

{

            int Creamy ;//پیر زن مقدار آورده ای ندارد 
            birthdaycake_out(out Creamy);
            label1.Text = ” مقدار خامه ای که پیر زن در نهایت دارد ” + ” = ” + Creamy.ToString();

}

 مدل Out

باز هم تاکید می کنیم که این مثال ها فقط و فقط برای فهم بهتر ref و out می باشد. امیدواریم پاسخگوی نیاز شما باشد. لطفا سوالات و نظرات خود را در قسمت دیدگاه ها زیر همین آموزش به اطلاع ما برسانید.

 

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

توابع OverLoad در سی شارپ : توابعی با نام مشابه که دارای تعداد ورودی یا نوع ورودی متفاوت باشد.

class ClassA
{
public int Sum(int A, int B)
{

return A + B;

    }

  public int Sum(int A, int B,int C)
{

return A + B+C;

   }

  public int Sum(int A,string B)
{

return A ;

  }

}

هرسه تابع اسم یکسانی دارند امّا تعداد ورودی و نوع پارامترهای ورودی متفاوت است.

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

وقتی تابع Sum را فراخوانی می کنیم پیغامی در زیر آن می آید اگر فلش زیر آن را بزنیم ورودی هایی که تابع Sum دارد را نمایش می دهد:

 

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

در توابع OverLoad اگر تعداد ورودی خیلی زیاد باشد و همگی هم از یک نوع باشند از عبارت  params می توان استفاده کرد.

class ClassA
{

  public int Sum(params int [] val)
{

   int s = 0;
foreach (int i in val)
s += i;
return s;
}

}

داخل پنجره فرم رفته و چندین عدد راوارد می کنیم تا با هم جمع کند:

private void button1_Click(object sender, EventArgs e)

{

ClassA C = new ClassA();
int m = C.Sum(3, 4, 5, 6, 7, 500, 15);
MessageBox.Show(m.ToString());

}

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

همانطور که دیدیم آموزش کلیدواژه Ref و Out و توابع OverLoad در سی شارپ به پایان رسید. امیدواریم با این مفاهیم آشنا شده باشید و بتوانید در برنامه هاتون استفاده کنید. در جلسه بعد می خواهیم با کلمه کلیدی Static  آشنا شویم.

 

لطفا سوالات و پیشنهادات خود را در قسمت دیدگاه ها، زیر همین آموزش با در میان بگذارید.