C#’ta Params ile Değişken Sayıda Parametre ile Çalışma
C#’ta Params ile Değişken Sayıda Parametre ile Çalışma
Bu makalemizde, C# metodlarında önemli bir yere sahip olduğunu düşündüğüm params anahtar kelimesinin nasıl kullanıldığını incelemeye çalışacağız. Bildiğiniz gibi metodlara verileri parametre olarak aktarabiliyor ve bunları metod içersinde işleyebiliyoruz. Ancak parametre olarak geçirilen veriler belli sayıda oluyor. Diyelimki sayısını bilmediğimiz bir eleman kümesini parametre olarak geçirmek istiyoruz. Bunu nasıl başarabiliriz? İşte params anahtar sözcüğü bu noktada devreye girmektedir. Hemen çok basit bir örnek ile konuya hızlı bir giriş yapalım.
| using System;
namespace ParamsSample1 for(int i=0;i<deger.Length;++i) /*Metoda gönderilen elemanlar doğal olarak bir dizi oluştururlar. Bu dizideki elemanlara bir for döngüsü ile kolayca erişebiliriz. Dizinin eleman sayısını ise Length özelliği ile öğreniyoruz.*/ return sonuc; static void Main(string[] args) Console.WriteLine(“8*5={0}”,cl.Carpim(8,5)); } |
Bu örneği çalıştıracak olursak, aşağıdaki sonucu elde ederiz.
Şekil 1. Ilk Params Örneğinin Sonucu
Peki derleyici bu işlemi nasıl yapıyor birazda ondan bahsedelim. Carpim isimli metoda değişik sayılarda parametre gönderdiğimizde, derleyici gönderilen paramtetre sayısı kadar boyuta sahip bir integer dizi oluşturur ve du dizinin elemanlarına sırası ile (0 indexinden başlayacak şekilde) gönderilen elemanları atar. Daha sonra aynı metodu bu eleman sayısı belli olan diziyi aktararak çağırır. cl.Carpim(8,5) satırını düşünelim; derleyici,
İlk adımda,
int[] dizi=new int[2] ile 2 elemanlı 1 dizi yaratır.
İkinci adımda,
dizi[0]=8
dizi[1]=5 şeklinde bu dizinin elemanlarını belirler.
Son adımda ise metodu tekrar çağırır.
cl.Carpim(dizi);
Bazı durumlarda parametre olarak geçireceğimiz değerler farklı veri tiplerine sahip olabilirler. Bu durumda params anahtar sözcüğünü, object tipinde bir dizi ile kullanırız. Hemen bir örnek ile görelim. Aynı örneğimize Goster isimli değer döndürmeyen bir metod ekliyoruz. Bu metod kendisine aktarılan değerleri console penceresine yazdırıyor.
| public void Goster(params object[] deger) { for(int i=0;i<deger.Length;++i) { Console.WriteLine(“{0}. değerimiz={1}”,i,deger[i].ToString()); } Console.ReadLine(); static void Main(string[] args) |
Görüldüğü gibi Goster isimli metodumuza değişik tiplerde(int,Float,Decimal,bool, String) parametreler gönderiyoruz. İşte sonuç;
Şekil 2. params object[] kullanımı.
Şimdi dilerseniz daha işe yarar bir örnek üzerinde konuyu pekiştirmeye çalışalım. Örneğin değişik sayıda tabloyu bir dataset nesnesine yüklemek istiyoruz. Bunu yapıcak bir metod yazalım ve kullanalım. Programımız, bir sql sunucusu üzerinde yer alan her hangibir database’e bağlanıp istenilen sayıdaki tabloyu ekranda programatik olarak oluşturulan dataGrid nesnelerine yükleyecek. Kodları inceledikçe örneğimizi daha iyi anlıyacaksınız.
Şekil 3. Form Tasarımımız
Uygulamamız bir Windows Application. Bir adet tabControl ve bir adet Button nesnesi içeriyor. Ayrıca params anahtar sözcüğünü kullanan CreateDataSet isimli metodumuzu içeren CdataSet isimli bir class’ımızda var. Bu class’a ait kodları yazarak işimize başlayalım.
| using System; using System.Data; using System.Data.SqlClient; namespace CreateDataSet /* CreateDataSet isimli metod gönderilen baglantiAdi stringinin değerine göre bir SqlConnection nesnesi oluşturur. tabloAdi ile dataset nesnesine eklemek istediğimi tablo adlarini bu metoda göndermekteyiz. params anahtarı kullanıldığı için istediğimiz sayıda tablo adı gönderebiliriz. Elbette, geçerli bir Database ve geçerli tablo adları göndermeliyiz.*/ public DataSet CreateDataSet(string baglantiAdi,params string[] tabloAdi) /*Bu döngü gönderdiğimiz tabloadlarını alarak bir Select sorgusu oluşturur ve SqlDataAdapter yardımıyla select sorgusu sonucu dönen tablo verilerini oluşturulan bir DataTable nesnesine yükler. Daha sonra ise bu DataTable nesnesi DataSet nesnemizin Tables kolleksiyonuna eklenir. Bu işlem metoda gönderilen her tablo için yapılacaktır. Böylece döngü sona erdiğinde, DataSet nesnemiz göndermiş olduğumuz tablo adlarına sahip DataTable nesnelerini içermiş olucaktır. */ for(int i=0;i<tabloAdi.Length;++i) da.Fill(dt); return ds; /* Son olarak metod çağırıldığı yere DataSet nesnesini göndermektedir.*/ public CDataSet() |
Şimdi ise btnYukle isimli butonumuzun kodlarını yazalım.
| private void btnYukle_Click(object sender, System.EventArgs e) { CDataSet c=new CDataSet(); DataSet ds=new DataSet(); ds=c.CreateDataSet(“northwind”,”Products”,”Orders”); for(int i=0;i<ds.Tables.Count;++i) |
Şimdi programımızı çalıştıralım. İşte sonuç;
Şekil 4. Tabloların yüklenmesi.
Görüldüğü gibi iki tablomuzda yüklenmiştir. Burada tablo sayısını arttırabilir veya azaltabiliriz. Bunu params anahtar kelimesi mümkün kılmaktadır. Örneğin metodomuzu bu kez 3 tablo ile çağıralım;
| ds=c.CreateDataSet(“northwind”,”Products”,”Orders”,”Suppliers”); |
Bu durumda ekran görüntümüz Şekil 5 teki gibi olur.
Şekil 5. Bu kez 3 tablo gönderdik.
Umuyorumki params anahtar sözcüğü ile ilgili yeterince bilgi sahibi olmuşsunuzdur. Bir sonraki makalemizde görüşmek dileğiyle hepinize mutlu günler dilerim.
