Makale Özeti

C#da çok kullanılmasa da bilinmesi gereken farklı parametre geçiş türleri bu yazıda açıklanmıştır.

Makale

C# Dilinde Paramatre Geçiş Tipleri:

C# dilinde parametrelere, parametre geçiş tipi tanımlamak mümkün. Metodlarda parametre tipinin önüne koyacağımız anahtar sözcüklerle parametrelerin metodların içine farklı şekilde geçmesini sağlayabiliyoruz.

Peki bu parametre türleri neler ve parametre geçişinde ne tür farklılıklar yaratıyor?

1) Parametrenin değer olarak geçilmesi:

Parametre tipi geçmediğimizde varsayılan parametre geçiş türüdür.

Bu tür parametre geçişinde geçilen parametrenin değeri metoda aktarılır. Metodun içinde parametrede olabilecek değişiklikler, geçilen değişkene yansıtılmaz.

2) Parametrenin referans olarak geçilmesi:

 ref anahtar sözcüğüyle tanımlanan bir parametre aracılığıyla, hem değişkenin değeri metoda aktarılabilecek, hem de metod içinde parametre üzerinde yapılan değişiklikler,  parametre olarak geçilen değişkene aktarılacaktır.

3) Çıktı parametre geçişi:

out anahtar sözcüğüyle belirtilen parametre türü, metoddan geriye değer döndürmek için kullanılabilir. Bu tipteki parametreye geçilen bir değişkene atanan değer çağrılan noktada kullanılabilecektir. Parametre geçilirken değişkenin değeri geçmediği için, parametre olarak geçilen değişkene değer atanmış olsa bile,  metod içinde değer atamadan kullanmamak gereklidir.

4) Değişken sayıda parametre geçişi:

params anahtar sözcüğüyle belirtilen bu parametre geçiş tipi, metoda değişken sayıda parametre geçilmesi gerektiğinde kullanılabilir. 

 Aşağıdaki kod örneğiyle bu bilgiler somutlaştırılabilir:

     class Class1

     {

            [STAThread]

            static void Main(string[] args)

            {

 

                  int sayi1 = 10;

                  metod1(sayi1);

                  // her ne kadar metodumuz gecilen parametreyi degistirmiş de olsa

                  // parametre değer olarak geçildiği için sonuç 10 olacaktır

                  Console.WriteLine("value tipinde parametre geçişi");

                  Console.WriteLine(sayi1) ;

           

                  int sayi2 = 10;

                  // parametreyi geçerken de ref anahtar sözcüğü kullanılmalı

                  metod2(ref sayi2);

                  // bu sefer parametre referans olarak geçildiğinden

                  // değişiklik değişkene yansıyacak ve sonuç 100 olacaktır

                  Console.WriteLine("ref tipinde parametre geçişi");

                  Console.WriteLine( sayi2);

 

 

                  int sayi3;

                  // parametreyi geçerken de out anahtar sözcüğü kullanılmalı

                  metod3(out sayi3);

               // sayi3 e değer atamadığımız halde parametre out olarak geçtiği için,

                  // metodda atanan değer değişkene yansıyacak ve sonuç 5 olacak

                  Console.WriteLine( "out tipinde parametre geçişi");

                  Console.WriteLine( sayi3);

 

                 

                  Console.WriteLine( "params tipinde parametre geçişi");

                  // 4 parametre toplanacak ve sonuç 10 olacak.

                  Console.WriteLine( metod4(1,2,3,4));

             }

 

            private static void metod1(int sayi )

            {

                  sayi = sayi * sayi;

            }

            private static void metod2(ref int sayi )

            {

                  sayi = sayi * sayi;

            }

  

            private static void metod3(out int sayi )

            {

                  // parametre geçilen değişkene önceden değer atanmış olsa da

                  // parametre geçilirken bu değer taşınmadığından

                  // bu noktada sayi değişkenine değer atanmamış durumda

                  sayi = 5;

            }

            private static int metod4(params int[] sayilar)

            {

                  int toplam = 0;

                  foreach(int sayi in sayilar)

                  {

                        toplam+=sayi;

                  }

                  return toplam;

            }

   }

 

 

İyi çalışmalar,

Onur Ağın
onur@onura.net