درس نهم - بخش دوم
اﻳﻦ ﻛﻠﻤﻪ ی ﻛﻠﯿﺪی ﻧﯿﺰ دﻗﯿﻘﺎ ھﻤﺎﻧﻨﺪ out ﻋﻤﻞ ﻣﻲ ﻛﻨﺪ و ﻧﺤﻮه ی ﺗﻌﺮﻳﻒ و اﺳﺘﻔﺎده از آن ﻧﯿﺰ ﻣﺸﺎﺑﻪ اﺳـﺖ ﺑـﺎ اﻳـﻦ ﺗﻔﺎوت ﻛﻪ آرﮔﻮﻣﺎﻧﻲ ﻛﻪ ﺑﻪ اﻳﻦ ﻧﻮع ﺗﻮاﺑﻊ ﻓﺮﺳﺘﺎده ﻣﻲ ﺷﻮد ﺑﺎﻳﺪ ﻣﻘﺪار دھﻲ اوﻟﯿﻪ ﺷﺪه ﺑﺎﺷﺪ.
ﻣﺜﺎل : ﻳﻚ ﺑﺮﻧﺎﻣـﻪ ی ﺳـﻲ ﺷـﺎرپ ﺟﺪﻳـﺪ consoleرا در VS.NETﺑـﺎز ﻛﻨﯿـﺪ و ﻧـﺎم آﻧـﺮا دراﺑﺘـﺪا ex۱۶ اﻧﺘﺨـﺎب ﻧﻤﺎﻳﯿـﺪ.
ﺳﭙﺲ ﻛﺪ زﻳﺮ را درون آن ﺑﻨﻮﻳﺴﯿﺪ :
namespace ex۱۶
}
class Class۱
}
(public static void FillArray(ref int[] arr
}
:// Create the array on demand
(if (arr == null
;[۰۱]arr = new int
:// Otherwise fill the array
;۳۲۱ = [۰]arr
;۴۲۰۱ = [۴]arr
{
[[STAThread
(static void Main(string[] args
}
:// Initialize the array
;{۵,۴,۳,۲,۱} = int[] myArray
:// Pass the array using ref
;(FillArray(ref myArray
:// Display the updated array
;(":Console.WriteLine("Array elements are
(++for (int i = ۰; i < myArray.Length; i
;([Console.WriteLine(myArray[i
;()Console.ReadLine
{
{
{
ﺗﻮﺿﯿﺤﺎﺗﻲ در ﻣﻮرد ﻛﺪ ﻓﻮق :
١- ھﻤﺎﻧﻄﻮر ﻛﻪ ﻣﻼﺣﻈﻪ ﻣﻲ ﻛﻨﯿﺪ در اﻳﻨﺠﺎ ھﻨﮕﺎم اﺳﺘﻔﺎده از ﺗﺎﺑﻊ FillArrayﺑﺎﻳﺪ آرﮔﻮﻣﺎﻧﻲ را ﻛﻪ ﻣﻲ ﺧـﻮاھﯿﻢ ﺑﻪ آن ﭘﺎس ﻛﻨﯿﻢ ﻣﻘﺪار دھﻲ اوﻟﯿﻪ ﻛﻨﯿﻢ.
٢- ﭘﺲ ﻣﻲ ﺗﻮان ﻧﺘﯿﺠﻪ ﮔﺮﻓﺖ آرﮔﻮﻣﺎﻧﮫﺎﻳﻲ ﻛﻪ ﺑﺎ outﺗﻌﺮﻳﻒ ﻣﻲ ﺷﻮﻧﺪ ﺑـﻪ ﺻـﻮرت ﺧـﺎﻟﺺ ﺧﺮوﺟـﻲ ھـﺴﺘﻨﺪ و ﻧﯿﺎزی ﺑﻪ ﻣﻘﺪار دھﻲ اوﻟﯿﻪ ھﻨﮕـﺎم اﺳـﺘﻔﺎده از آﻧﮫـﺎ وﺟـﻮد ﻧـﺪارد. از ref ھﻨﮕـﺎﻣﻲ اﺳـﺘﻔﺎده ﻣـﻲ ﻛﻨـﯿﻢ ﻛـﻪ ﺑﺨﻮاھﯿﻢ روی ﻣﺘﻐﯿﺮ ﻣﻮﺟﻮد و ﻣﻘﺪار دھﻲ ﺷﺪه ی ﺧﺎرج از ﺗﺎﺑﻊ ، درون ﺗﺎﺑﻊ ﻋﻤﻠﯿﺎﺗﻲ ﺻﻮرت ﮔﯿﺮد و ﺳـﭙﺲ ھﻤﺎن ﻣﺘﻐﯿﺮ دﺳﺘﻜﺎری ﺷﺪه ، ﻋﻮدت داده ﺷﻮد.
ﺗﻌﺮﻳﻒ ﺗﺎﺑﻌﻲ ﺑﺎ ﺗﻌﺪاد آرﮔﻮﻣﺎﻧﮫﺎی ﻧﺎﻣﻌﻠﻮم :
ﮔﺎھﻲ از اوﻗﺎت ﻧﯿﺎز اﺳﺖ ﺗﺎ ﺗﺎﺑﻌﻲ ﺗﻌﺮﻳﻒ ﻛﻨﯿﻢ ﻛﻪ ﺗﻌﺪاد آرﮔﻮﻣﺎﻧﮫﺎی آن ﻣﺘﻐﯿﺮ ﺑﺎﺷـﻨﺪ .ﺑـﺮای اﻳـﻦ ﻣﻨﻈـﻮر از ﻛﻠﻤـﻪ ی ﻛﻠﯿﺪی params اﺳﺘﻔﺎده ﻣﻲ ﺷﻮد.
دوﻧﻜﺘﻪ در اﻳﻨﺠﺎ ﺣﺎﺋﺰ اھﻤﯿﺖ اﺳﺖ:
١- در ھﺮ ﺗﺎﺑﻌﻲ ﺗﻨﮫﺎ ﻣﻲ ﺗﻮان ﻳﻜﺒﺎر از paramsاﺳﺘﻔﺎده ﻛﺮد.
٢- ﭘﺲ از ﺑﻜﺎر ﺑﺮدن params دﻳﮕﺮ ﻧﻤﻲ ﺗﻮان ھﯿﭻ آرﮔﻮﻣﺎﻧﻲ را ﺗﻌﺮﻳﻒ ﻛﺮد.
ﻳﻜﻲ از ﻣﺜﺎﻟﮫﺎﻳﻲ ﻛﻪ در اﻳﻦ زﻣﯿﻨﻪ ﻣﻲ ﺗﻮان اراﺋﻪ داد اﺳﺘﻔﺎده از آراﻳـﻪ ھـﺎ ﺑـﻪ ﻋﻨـﻮان آرﮔﻮﻣـﺎن ورودی اﺳـﺖ. در اﻳـﻦ ﺣﺎﻟﺖ ﻳﺎ ﻣﻲ ﺗﻮان ﻳﻚ آراﻳﻪ را ﺑﻪ ﺻﻮرت ﻛﺎﻣﻞ ﺑﻪ ﺗﺎﺑﻊ ﻣﻌﺮﻓﻲ ﻛﺮد و ﻳـﺎ ﺗﻨﮫـﺎ ﻧـﺎم آﻧـﺮا ﺑـﻪ ﺗـﺎﺑﻊ ﭘـﺎس ﻛـﺮد. ﻣﺜـﺎل زﻳـﺮ را ﻣﻼﺣﻈﻪ ﻛﻨﯿﺪ :
ﻣﺜﺎل : ﻳﻚ ﺑﺮﻧﺎﻣـﻪ ی ﺳـﻲ ﺷـﺎرپ ﺟﺪﻳـﺪ consoleرا در VS.NETﺑـﺎز ﻛﻨﯿـﺪ و ﻧـﺎم آﻧـﺮا دراﺑﺘـﺪا ex۱۷اﻧﺘﺨـﺎب ﻧﻤﺎﻳﯿـﺪ.
ﺳﭙﺲ ﻛﺪ زﻳﺮ را درون آن ﺑﻨﻮﻳﺴﯿﺪ :
namespace ex۱۷
}
class Class۱
}
(public static void UseParams(params int[] list
}
( ++for ( int i = ۰ ; i < list.Length ; i
;([Console.WriteLine(list[i
;()Console.WriteLine
{
[[STAThread
(static void Main(string[] args
}
;(۳ ,۲ ,۱)UseParams
;{۲۱,۱۱,۰۱} [۳]int[] myarray = new int
;(UseParams(myarray
;()Console.ReadLine
{
{
{
ﺗﻮﺿﯿﺤﺎﺗﻲ در ﻣﻮرد ﻛﺪ ﻓﻮق :
١- در ﺗﺎﺑﻊ main ﺑﻪ دو ﺻﻮرت از ﺗﺎﺑﻊ UseParams اﺳﺘﻔﺎده ﺷﺪه اﺳـﺖ. ﻳـﺎ اﻳﻨﻜـﻪ ﺧﯿﻠـﻲ ﺳـﺎده ھـﺮ ﺗﻌـﺪاد آرﮔﻮﻣﺎن را ﻣﻲ ﺗﻮان ﺑﻪ ﺗﺎﺑﻊ ﻓﺮﺳﺘﺎد و ﻳﺎ اﻳﻨﻜﻪ در اداﻣﻪ آراﻳﻪ اﻳﻲ رﺳﻤﺎ ﺗﻌﺮﻳـﻒ و ﺳـﭙﺲ ﺑـﻪ ﺗـﺎﺑﻊ ﻓﺮﺳـﺘﺎده ﺷﻮد.
٢- ﻧﺤﻮه ی ﺗﻌﺮﻳﻒ و اﺳﺘﻔﺎده از آراﻳﻪ ھﺎ ﺑﻪ ﺻﻮرت آرﮔﻮﻣﺎن ورودی را ﻧﯿﺰ ﻣﻲ ﺗﻮان در ﻣﺜﺎل ﻓﻮق آﻣﻮﺧﺖ.