Makale Özeti

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

Makale

VB.NET 'den C#'a - 5

vbXXXX ve ControlChars sabitleri

VB 6.0 ile çalışanların VB.NET'de de kullanmaya devam ettiği vbXXX (örneğin vbCrLf,vbTab gibi) ifadeleri ve VB.NET'de VB6.0'dan kalma vbXXXX ifadelerin yanında ControlChars adında bir sınıfdaki sabitleri kullanabiliriz. C#'da VB.NET'de olduğundan farklı olarak özel karakterler için ayrı birer sabit kullanmak yerine escape karakter dizileri kullanılır.  Örneğin \t karakteri Tab karakterini temsil eder.

 

karakter C# escape karakter VB sabit
yeni satır \n vbLf veya ControlChars.Lf
satır başı \r Cr veya ControlsChars.Cr
satır başı,yeni satır \r\n vbNewLine veya ControlChars.newLine
vbCrLf veya ControlChars.Crlf
çift tırnak \" ControlChars.Quote
ters bölü işareti \\  
tab \t vbTab veya ControlChars.Tab

 

       Dim str As String

        str = "VB.NET'de" & vbCrLf & ControlChars.Quote & "ControlChars" & ControlChars.Quote & ControlChars.CrLf & "sınfı ile sabitlere erişebiliriz."

        MessageBox.Show(str)


Yukarıdaki kod parçası ile bir string içinde çift tırnak karakteri ve ve yeni satır kullanılmıştır.Bunu C# ile aşağıdaki şekilde yazabiliriz.

     string str;

     str="VB.NET'de \n\"ControlChars\"\nsınfı ile sabitlere erişebiliriz.";

     MessageBox.Show(str);

 

C#'da escape karakterler \ karaketeri ile başlar. Ancak string içerisindeki çokça \ yer alacağı bir senaryoda \ların özel bir karakter değil string içindeki bir literal karakter olmasını istediğinizde string tanımlamasının önünde @ işaretini kullanabilirsiniz.

                  string yol;

                  yol="D:\\makaleler\\yazgelistir\\vb2cs\\5.htm";

                  MessageBox.Show(yol);


Yukarıdaki ifade de gözüktüğü gibi bir dosya yolu belirtirken içerisindeki \ karakterlerinin literal olarak algılanabilmesi için iki kere yazılmıştır. Ancak bu string içerisinde hiç escape karakter kullanılmayacağından emin olduğumuzu düşünerek, tüm \ ları literal olarak kabul edilmesi için aşağıdaki şekilde string önüne @ karakteri koyabiliriz.

                  string yol;

                  yol=@"D:\makaleler\yazgelistir\vb2cs\5.htm";

                  MessageBox.Show(yol);


Tür Dönüşümü

VB.NET'de olduğu gibi C#'da da uygun türler arasında tür dönüşüm işlemleri gerçekleştirilebilir.

 

Örneğin;

Public Class Insan

End Class

Public Class Ogrenci

    Inherits Insan

End Class


Aşağıdaki kod parçasında kullanmak için yukarıdaki iki sınıfı oluşturalım. VB.NET projesinde varsayılan olarak Option Strict değeri Off durumdadır ve bu şekilde yukarıdan aşağıya bir dönüşüm yapılmak istendiğinde bu işlemi implicit olarak yani, açıkça dönüşüm kodunu yazmadan yapmaya çalışmaktadır. Son satırda Ogrenci türündeki o değişkenine insan türünde olaran i değişkeni eşitleniyor. i değişkeninin gösterdiği nesnenin ogrenci türünde olacağı garantisi yoktur. Çalışma zamanında i değişkenin gösterdiği nesnenin türüne göre hata alabilme olasılığımız vardır.

Ancak VB.NET'de dönüşümlerin explicitly olarak yapılabilmesi için Option Strict değerini On yapabiliriz. Aşağıdaki kodu Option Strict On iken yazdığımızda kodumuz derlenmez. Derleyici hatası ile kaşılaşırız.

        Dim i As Insan
        Dim o As Ogrenci

        i = New Ogrenci

        o = i


Option Strict On iken açıkça (explicitly) tür dönüşümü işlemini belirtmeliyiz.VB.NET'de bunun için CType kullanılır.

        Dim i As Insan
        Dim o As Ogrenci

        i = New Ogrenci

        o = CType(i, Ogrenci)

Bu durum VB.NET'de Option Strict ile belirlenebilirken, C# için varsayılan davranış biçimidir.

Aynı tanımlamaları ve dönüşüm işlemini C# için aşağıdaki şekilde yapabiliriz.

      public class insan{}

      public class ogrenci:insan{}


      insan i;

      ogrenci o;

      i=new ogrenci();

      o=(ogrenci)i;

 

C#'da tür dönüşüm için kullanılan yazım kuralı değişkenin önüne dönüştürüleceği türün ismini parantez içinde yazmaktır.( (ogrenci)i )

Bu dönüşüm işlemi sırasında eğer i değişkeni bir ogrenci nesnesini göstermiyor ise çalışma zamanında InvalidCastException hatası ile karşılaşırız.

C#'da dönüşüm için kullanılabilecek diğer bir yöntem ise as ifadesidir.

                  insan i;

                  ogrenci o;

                  i=new ogrenci();

                  o=i as ogrenci;

                  if (o !=null)

                  {MessageBox.Show ("Dönüşüm başarılı, o değişkeni ile ogrenci türünde bir nesneye erişebiliriz.");}

                  else

                  {MessageBox.Show ("Dönüşüm başarısız,o \"null\"");}

 

Yukarıdaki kod parçasında i değişkeni ogrenci türünde bir nesne gösterdiği için as ile yapılan dönüşüm işlemi sonunda o değişkeni ogrenci nesnesini göstermektedir ve birinci mesaj kutusu görüntülenecektir. Yukarıdaki kodu şu şekilde düzenleyerek test edelim.

                  insan i;

                  ogrenci o;

                  i=new insan();

                  o=i as ogrenci;

                  if (o !=null)

                  {MessageBox.Show ("Dönüşüm başarılı, o değişkeni ile ogrenci türünde bir nesneye erişebiliriz.");}

                  else

                  {MessageBox.Show ("Dönüşüm başarısız,o \"null\"");}

Yukarıdaki kodda yapılan değişiklik i değişkenine ogrenci nesnesinin atandığı satır yerine bir insan nesnesi atanmasıdır. Bu durumda i değişkenin gösterdiği nesne as ile ogrenci ye dönüştürülemek istendiğinde hata oluşması yerine geriye null dönecektir. Ve if şartının ikinic bölümündeki mesaj kutusu görüntülenecektir.


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