کلیدواژه 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();
}
مثال دوم
این بار این طوری فرض می کنیم که مغازه دار 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();
}
مثال سوم
این بار این طوری فرض می کنیم که پیر زن اصلا هیچ مقدار خامه ندارد اما یک کیک تولد می خواهد .
مغازه دار به شیرینی پز سفارش یک کیک تولد می دهد و از شیرینی پز می خواهد که یک کیک تولد خلق کند . شیرینی پز کیک تولدی خلق می کند که ممکن است 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();
}
باز هم تاکید می کنیم که این مثال ها فقط و فقط برای فهم بهتر 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 ;
}
}
هرسه تابع اسم یکسانی دارند امّا تعداد ورودی و نوع پارامترهای ورودی متفاوت است.
وقتی تابع Sum را فراخوانی می کنیم پیغامی در زیر آن می آید اگر فلش زیر آن را بزنیم ورودی هایی که تابع Sum دارد را نمایش می دهد:
در توابع 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());
}
همانطور که دیدیم آموزش کلیدواژه Ref و Out و توابع OverLoad در سی شارپ به پایان رسید. امیدواریم با این مفاهیم آشنا شده باشید و بتوانید در برنامه هاتون استفاده کنید. در جلسه بعد می خواهیم با کلمه کلیدی Static آشنا شویم.
لطفا سوالات و پیشنهادات خود را در قسمت دیدگاه ها، زیر همین آموزش با در میان بگذارید.
خیلی مفید بود ممنون
ممنون زحمت کشیدین