اﺳﺘﻔﺎده از ﻛﻠﻤﻪ ی ﻛﻠﯿﺪی ‪: ref‬‬

‫اﻳﻦ ﻛﻠﻤﻪ ی ﻛﻠﯿﺪی ﻧﯿﺰ دﻗﯿﻘﺎ ھﻤﺎﻧﻨﺪ ‪ out‬ ﻋﻤﻞ ﻣﻲ ﻛﻨﺪ و ﻧﺤﻮه ی ﺗﻌﺮﻳﻒ و اﺳﺘﻔﺎده از آن ﻧﯿﺰ ﻣﺸﺎﺑﻪ اﺳـﺖ ﺑـﺎ اﻳـﻦ‬ ‫ﺗﻔﺎوت ﻛﻪ آرﮔﻮﻣﺎﻧﻲ ﻛﻪ ﺑﻪ اﻳﻦ ﻧﻮع ﺗﻮاﺑﻊ ﻓﺮﺳﺘﺎده ﻣﻲ ﺷﻮد ﺑﺎﻳﺪ ﻣﻘﺪار دھﻲ اوﻟﯿﻪ ﺷﺪه ﺑﺎﺷﺪ.‬

‫ﻣﺜﺎل : ﻳﻚ ﺑﺮﻧﺎﻣـﻪ ی ﺳـﻲ ﺷـﺎرپ ﺟﺪﻳـﺪ ‪ console‬را در ‪ VS.NET‬ﺑـﺎز ﻛﻨﯿـﺪ و ﻧـﺎم آﻧـﺮا دراﺑﺘـﺪا ‪ ex۱۶‬ اﻧﺘﺨـﺎب ﻧﻤﺎﻳﯿـﺪ.‬
‫ﺳﭙﺲ ﻛﺪ زﻳﺮ را درون آن ﺑﻨﻮﻳﺴﯿﺪ :‬
‫;‪using System‬‬

‫‪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۱۷‬اﻧﺘﺨـﺎب ﻧﻤﺎﻳﯿـﺪ.‬
‫ﺳﭙﺲ ﻛﺪ زﻳﺮ را درون آن ﺑﻨﻮﻳﺴﯿﺪ :‬

‫;‪using System‬‬

‫‪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‬ اﺳﺘﻔﺎده ﺷﺪه اﺳـﺖ. ﻳـﺎ اﻳﻨﻜـﻪ ﺧﯿﻠـﻲ ﺳـﺎده ھـﺮ ﺗﻌـﺪاد ‫آرﮔﻮﻣﺎن را ﻣﻲ ﺗﻮان ﺑﻪ ﺗﺎﺑﻊ ﻓﺮﺳﺘﺎد و ﻳﺎ اﻳﻨﻜﻪ در اداﻣﻪ آراﻳﻪ اﻳﻲ رﺳﻤﺎ ﺗﻌﺮﻳـﻒ و ﺳـﭙﺲ ﺑـﻪ ﺗـﺎﺑﻊ ﻓﺮﺳـﺘﺎده‬ ‫ﺷﻮد.‬
‫٢- ﻧﺤﻮه ی ﺗﻌﺮﻳﻒ و اﺳﺘﻔﺎده از آراﻳﻪ ھﺎ ﺑﻪ ﺻﻮرت آرﮔﻮﻣﺎن ورودی را ﻧﯿﺰ ﻣﻲ ﺗﻮان در ﻣﺜﺎل ﻓﻮق آﻣﻮﺧﺖ.‬