پارامترهای ref , out در سی شارپ

چگونه از يك تابع بيش از يك خروجي دريافت كنيم؟

ظاهرا به نظر مي رسد كه توابع فقط مي توانند يك return داشته باشند و بلافاصله پس از فراخواني return كار تابع پايان يافته است. در سي شارپ دو كلمه ي كليدي به نام هاي ref و out اضافه شده اند كه اين امر را ساده تر مي كنند.


استفاده از كلمه ي كليدي out :



از out در تعريف تابع قبل از معرفي نوع آرگومان ورودي استفاده مي كنيم . در اين حالت بجاي اينكه به اين آرگومان ، آرگومان ورودي بگوييم ، مي توان آنرا آرگومان خروجي ناميد. تا يك مثال را در اين زمينه با هم مرور نكنيم اين مورد مفهوم نخواهد بود :

 



مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex15 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

 

using System;

namespace ex15
{
class Class1
{

public static int TestOut(out char i)
{
i = 'b';
return -1;
}

[STAThread]
static void Main(string[] args)
{
char i; // variable need not be initialized
Console.WriteLine(TestOut(out i));
Console.WriteLine(i);
Console.ReadLine();

}
}
}

 


توضيحاتي در مورد كد فوق :


1- در تابع TestOut آرگومان i از با كلمه ي كليدي out مشخص شده است. يعني اينكه درون تابع هر گونه تغييري روي i انجام شود ، خارج از تابع قابل دسترسي است.


2- توابعي كه داراي آرگومانهايي تعريف شده با كلمه ي كليدي out هستند نيز مي توانند از return هم استفاده كنند. همانند مثال فوق.



استفاده از كلمه ي كليدي ref :



اين كلمه ي كليدي نيز دقيقا همانند out عمل مي كند و نحوه ي تعريف و استفاده از آن نيز مشابه است با اين تفاوت كه آرگوماني كه به اين نوع توابع فرستاده مي شود بايد مقدار دهي اوليه شده باشد.



مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex16 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

 

using System;

namespace ex16
{
class Class1
{
public static void FillArray(ref int[] arr)
{
// Create the array on demand:
if (arr == null)
arr = new int[10];
// Otherwise fill the array:
arr[0] = 123;
arr[4] = 1024;
}

[STAThread]
static void Main(string[] args)
{
// Initialize the array:
int[] myArray = {1,2,3,4,5};

// Pass the array using ref:
FillArray(ref myArray);

// Display the updated array:
Console.WriteLine("Array elements are:");
for (int i = 0; i < myArray.Length; i++)
Console.WriteLine(myArray[i]);

Console.ReadLine();
}
}
}

 

توضيحاتي در مورد كد فوق :


1- همانطور كه ملاحظه مي كنيد در اينجا هنگام استفاده از تابع FillArray بايد آرگوماني را كه مي خواهيم به آن پاس كنيم مقدار دهي اوليه كنيم.


2- پس مي توان نتيجه گرفت آرگومانهايي كه با out تعريف مي شوند به صورت خالص خروجي هستند و نيازي به مقدار دهي اوليه هنگام استفاده از آنها وجود ندارد. از ref هنگامي استفاده مي كنيم كه بخواهيم روي متغير موجود و مقدار دهي شده ي خارج از تابع ، درون تابع عملياتي صورت گيرد و سپس همان متغير دستكاري شده ، عودت داده شود.



تعريف تابعي با تعداد آرگومانهاي نامعلوم :



گاهي از اوقات نياز است تا تابعي تعريف كنيم كه تعداد آرگومانهاي آن متغير باشند .براي اين منظور از كلمه ي كليدي params استفاده مي شود.


دونكته در اينجا حائز اهميت است:


1- در هر تابعي تنها مي توان يكبار از params استفاده كرد.


2- پس از بكار بردن params ديگر نمي توان هيچ آرگوماني را تعريف كرد.



يكي از مثالهايي كه در اين زمينه مي توان ارائه داد استفاده از آرايه ها به عنوان آرگومان ورودي است. در اين حالت يا مي توان يك آرايه را به صورت كامل به تابع معرفي كرد و يا تنها نام آنرا به تابع پاس كرد. مثال زير را ملاحظه كنيد :



مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex17 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

 

using System;

namespace ex17
{
class Class1
{
public static void UseParams(params int[] list)
{
for ( int i = 0 ; i < list.Length ; i++ )
Console.WriteLine(list[i]);
Console.WriteLine();
}

[STAThread]
static void Main(string[] args)
{
UseParams(1, 2, 3);

int[] myarray = new int[3] {10,11,12};
UseParams(myarray);

Console.ReadLine();

}
}
}

 

توضيحاتي در مورد كد فوق :



1- در تابع main به دو صورت از تابع UseParams ما استفاده شده است. يا اينكه خيلي ساده هر تعداد آرگومان را مي توان به تابع فرستاد و يا اينكه در ادامه آرايه ايي رسما تعريف و سپس به تابع فرستاده شود.


2- نحوه ي تعريف و استفاده از آرايه ها به صورت آرگومان ورودي را نيز مي توان در مثال فوق آموخت

 

 


مطالب مشابه :


آرایه ها در سی شارپ

فروش سامانه پیامک و پنل sms در زبان سي كمي متفاوت بود. فروش پروژه شطرنج به زبان سی شارپ.




حلقه های تکرار درسی شارپ

فروش سامانه پیامک و پنل sms يك برنامه ي سي شارپ جديد console فروش پروژه شطرنج به زبان سی شارپ.




تعريف متدها در سي شارپ

تعريف متدها در سي شارپ فروش سامانه پیامک و پنل sms فروش پروژه شطرنج به زبان سی شارپ.




مباحث تكميلي آرايه ها (آرايه هاي چند بعدي):

فروش سامانه پیامک و پنل sms سي شارپ دو نوع آرايه ي چند فروش پروژه شطرنج به زبان سی شارپ.




پارامترهای ref , out در سی شارپ

فروش سامانه پیامک و پنل sms در سي شارپ دو كلمه ي كليدي به فروش پروژه شطرنج به زبان سی شارپ.




ساختار های تصمیم گیری if , switch-case

1- سي شارپ به كوچكي و فروش پروژه ساعت به زبان #C و سامانه پیام کوتاه و پنل sms-ارسال




کنترل TreeView در سی شارپ

متون مربوط به زبان تخصصی استاد خیر اندیش Sms انگلیسی ارسال در تاريخ شنبه هجدهم اردیبهشت




برچسب :