Makale Özeti

"VB.NET biliyorum C# da öğrenmek istiyorum." diyenler için bir makale dizisi.

Makale

VB.NET 'den C#'a - 4

IF Deyimi

C#'da if deyiminin kullanımı genel C# yazım kurallarına göre VB.NET'den farklıdır. If deyimindeki koşul mutlaka parantez içerisinde yazılmalıdır.

                  int i=10;

                  if (i>5)
                       MessageBox.Show("i 10'dan büyük");


if deyimi küçük harfle yazılır, VB.NET'de ki gibi Then ifadesi yoktur. Eğer if şartı sağlandığında çalışacak kod bloğu tek satır ise yukarıdaki örnekte gözüktüğü gibi {} karakterlerini kullanmadan kod satırı yazılabilir.
 

                  bool TemizlikGunu=true;

                  if (TemizlikGunu==true)

                  {

                        CamasirYika();

                        BulasikYika();

                        UtuYap();

                  }

 

if deyimine else ifadesini de eklemek istediğiniz durumlarda uyulması gereken yazım kuralı gözükmektedir. else durumunda çalışacak kod bloğu tek satır olduğu için {} karakterleri kullanılmadan yazılabileceği için o şekilde yazılmıştır.

                  bool TemizlikGunu=false;

                  if (TemizlikGunu==true)

                  {

                        CamasirYika();

                        BulasikYika();

                        UtuYap();

                  }

                  else

                        KodYaz();

VB.NET'de ki gibi ElseIf işlemi için aşağıdaki gibi bir yazım kuralına uyulmalıdır.

                  bool TemizlikGunu=false;

                  bool DersSaati=true;

                  if (TemizlikGunu==true)

                  {

                        CamasirYika();

                        BulasikYika();

                        UtuYap();

                  }

                  else if (DersSaati==true)

                  {

                        DersHazirligiYap();

                        DersAnlat();

                  }

                  else

                        KodYaz();

IIF
VB.NET'de IIf fonksiyonu bir şarta bağlı olarak sadece bir değer elde etmek istediğimiz durumlarda işimize yarar. IF deyiminin kısayolu olarak tabir edilebilir. Koşula bağlı olarak geriye değer döner, koşul doğru ise ilk değeri, değil ise ikinci değeri döner.

        Dim i As Integer = 11

        Dim msg As String = IIf(i > 10, "10'dan büyük", "10'dan büyük değil")

        MessageBox.Show(msg)

 

C#'da aynı işlem için ?: karakterlerinden oluşan aşağıdaki gibi bir deyim yazılmalıdır.

                  int i=11;

                  string msg=(i>10)?"10'dan büyük":"10'dan büyük değil";

                  MessageBox.Show(msg);

For Döngüsü

VB.NET'de kullanılan for..next döngüsünü C#'da aşağıdaki şekilde kullanabiliriz. for ifadesinin birinci bölümü başlangıç atamasının yapıldığı bölüm,ikinci  bölüm test bölümü, üçüncü bölüm ise döngünün sayacı için artışın yapılacağı işlem bölümüdür.

        for (int i=1;i<=10;i++)

        {

            this.listBox1.Items.Add(i.ToString());

        }


For döngüsünde birinci bölümde herhangi türde bir değer tanımlaması yapılabilir, tam sayı gibi bir kısıt yoktur. Tanımlanan değerin genellikle döngünün kaç kere çalışacağını belirleyen sayaç değişkenidir. İkinci bölüm ise boolean (true/false) dönen herhangi bir koşul yazılabilir. Genellikle sayaç değişkenin değerinin sınandığı bir koşul kullanılır. Son bölüm ise genellikle sayaç değerinin artışını belirleyen ifadeyi içermektedir.

For Each Döngüsü

VB.NET ve C# iki dil de foreach deyimini desteklemektedir. ForEach ile dizi değişken,collection gibi türlerin üyeleri arasında gezinilebilir. ForEach ile IEnumerable arayüzünü uygulayan türler üzerinde gezinebilirsiniz.

        string[] isimler={"ali","ahmet","mehmet","cengiz","hüseyin","kemal"};

        foreach (string isim in isimler)

        {

           listBox1.Items.Add(isim);

        }

Yukarıdaki kod parçası bir dizi değişken üzerinden foreach deyimi ile gezinilmesi gösterilmektedir. isimler adındaki her string ifadesi için bu döngü içerisindeki kodlar çalışacak ve döngü içerisindeki kod bloğu isimler dizisi içerisindeki hangi üye için çalışmakta ise o üyeye isim değişkeni ile erişilebilir.

foreach ifadesi ile dizi yada IEnumerable arayüzünü uygulayan bir sınıfı üzerinde gezinirken, kayıtlar üzerinde güncelleme yapılamaz.Yani isim değişkenine bir değer atamak istediğimiz de hata alırız. C#'dan farkılı olarak VB.NET'de güncelleme yapılabilir.

Try-Catch-Finally

VB.NET'de ki try-catch-finally

        Dim con As New SqlClient.SqlConnection(ConnectionString)

        Try

            con.Open()

        Catch ex As SqlClient.SqlException

            MessageBox.Show("Hata no : " & ex.Number & " - Mesaj : " & ex.Message)

        Catch ex As Exception

            MessageBox.Show(ex.Message)

        Finally

            con.Close()

        End Try

Yukarıdaki VB.NET try-catch-finally ifadesini C# ile aşağıdaki şekilde yazabiliriz.

            SqlConnection con=new SqlConnection(ConnectionString);

            try

            {

                con.Open();

            }

            catch (SqlException ex)

            {

                MessageBox.Show("Hata no : " + ex.Number + " - Mesaj : " + ex.Message);

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

            finally

            {

                con.Close();

            }

VB.NET'de destekleneye Catch..When ifadesi C#'da desteklenmemektedir. Ayrıca VB.NET'de sadece belirtilen türde exceptionları yakalayan catch ifadelerinin sırası mantıken hatalı olduğunda derleyici bunun için bir uyarı vermez, ancak C#'da verir. Örneğin Exception'ın SqlException'dan önce yakalanması.

Örneğin aşağıdaki ifade derleme aşamasında hata verecektir. Çünkü Exception'dan miras alan SqlException türündeki hata ikinci sırada yakalanmaya çalışılıyor. Bu durumda oluşan her hata bir Exception sınıfı türeyeni olduğuna göre her hata bu catch tarafından yakalanır. Tabi derleyicisi bu kodun derlenmesine izin verseydi.

            SqlConnection con=new SqlConnection(ConnectionString);

            try

            {

                con.Open();

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

            catch (SqlException ex)

            {

                MessageBox.Show("Hata no : " + ex.Number + " - Mesaj : " + ex.Message);

            }

            finally

            {

                con.Close();

            }

 

Select Case Koşulu

VB.NET'de Select Case ile yapabildiğimiz işlemleri C#'da switch ifadesi ile gerçekleştirebiliriz.

        Dim katsayi As Integer = Integer.Parse(TextBox1.Text)

        Select Case katsayi

            Case 1 To 3

                MessageBox.Show("katsayı 1 ile 3 arasında")

            Case 4

                MessageBox.Show("katsayı dört")

            Case 5, 6, 7

                MessageBox.Show("katsayı 5,6 yada 7")

            Case Else

                MessageBox.Show("katsayı 1 ve 7 arasında değil")

        End Select

Yukarıdaki kod parçasının C# karşılığı aşağıdaki şekilde olacaktır. Select Case ifadesinin C# karşılığı switch'dir.

            int katsayi=int.Parse(textBox1.Text);

            switch (katsayi)

            {

                case 1:

                case 2:

                case 3:

                    MessageBox.Show("katsayi 1 ile 3 arasında");

                    break;

                case 4:

                    MessageBox.Show ("katsayi dört");

                    break;

                case 5:

                case 6:

                case 7:

                    MessageBox.Show ("Katsayı 5,6 yada 7");

                    break;

                default:

                    MessageBox.Show("katsayı 1 ve 7 arasında değil");

                    break;

            }

C#'da switch ifadesinde VB.NET'deki Select Case'de yer alan To veya virgül ile birden fazla değeri arka arkaya yazmak desteklenmemektedir. Bunun için içine bir şey yazılmamış case ifadelerini arkaya arkaya yazmak gereklidir, tabiki break ifadesini yazmadan. break ifadesi kod bloğumuzun yer aldığı her case sonuna eklenmelidir.

Cengiz HAN
Microsoft ASP.NET MVP
cengiz@cengizhan.com