.NET'te ~ (Tilda) karakterini kullanabileceğiniz durumlar

~ 'yı hiç kullanmayanlara yönelik öylesine bir yazı

C# ve ASP.NET'te tilda (~) karakterini kullanabileceğiniz birkaç yer vardır. Bakalım bunlardan kaç tanesini biliyordunuz?

 

1) Class'larda kullanımı

Class'larımızı yazarken zaman zaman constructor kullanmışsınızdır. Her ne kadar public property'leri, bu classtan bir object türeteceğimiz satırda direkt olarak ayarlama şansına sahip olduktan sonra pek fazla kullanmamaya başlasak da zaman zaman kullanmışızdır. 

Constructor (kurucu metot), bir class'tan nesne oluşturulacağı zaman otomatik olarak çağrılan, class ile aynı isme sahip ve void,  int, vb. gibi tip tanımlaması yapmadan tanımladığımız metotlardır.

Bunun dışında bir de aynı mantıkla çalışan destructor (yokedici metot) lar vardır. Constructor'ın tersine oluşturduğumuz nesne yok edilirken çalıştırılırlar.

Aşağıda bunun bir örneğini görebilirsiniz:

class Sample 
    { 
        public Sample() 
        { 
            Console.WriteLine("Test constuctor"); 
        } 
        ~Sample() 
        { 
            Console.WriteLine("Destructor"); 
        } 
    } 

Sample sınıfının destructor ını tanımlarken metodun başına ~karakterini koyduğumuza dikkat edin.

Bir bonus not: Constructor'ların tersine, destructor lar overload edilemez ve destructorların başında erişim belirleyicisi yer almaz.

 

2) Enum'larda kullanımı

Örnek bir ödeme tipleri enum u yazalım:

[Flags]
public enum OdemeTipleri
{   
    Hepsi = ~0, // bütün bitler 1 olsun
    Hicbiri =  0,
    Nakit =  1,
    Cek =  2,
    KrediKarti =  4,
    Havale = 8
}

Şimdi de bir örnekte kullanalım:

OdemeTipleri tip = OdemeTipleri.Nakit;

Peki bir koşulun sağlanmasını test etmek isteyelim, mesela ödeme tipi nakit değil ama diğer yollardan birisi ise nasıl bir if satırı yazardık?

if(tip == OdemeTipleri.Cek || tip == OdemeTipleri.KrediKarti || tip == OdemeTipleri.Havale)
{
// ....
}

şeklinde bir if satırı yazardık. İşte bu noktada ~ karakteri işimizi rahatlatmaktadır.

Yukarıdaki if bloğu yerine şunu rahatlıkla kullanabiliriz:

OdemeTipleri tip = OdemeTipleri.Cek;

int odemeTipi = (int)(OdemeTipleri.Hepsi & ~OdemeTipleri.Nakit);

if((odemeTipi & (int)tip) > 0)
{
 // Console.WriteLine ("OK");
 // ...
}

Bir sürü veya yazmadan kurtulmuş olduk.

Bonus bilgi: ~ operatörü bit bazında değilleme yapmaktadır. Yani (11110010)2 sayısını değillediğimizde (00001101)2 sayısını elde ederiz. (& ise bitsel ve operatörüdür)

Yukarıdaki kodda (OdemeTipleri.Hepsi & ~OdemeTipleri.Nakit); tanımlaması Nakit hariç diğer tüm ödeme yolları anlamına gelmektedir. Keza aynı şekilde enum tanımlamasındaki Hepsi = ~0 tanımı da aynı şekilde çalışmaktadır.

 

3) Dosya veya resim yolu tanımlamasında kullanımı

~ (tilda) web sitemizin root unu gösteren bir kısa yoldur.

Response.Redirect("~/Login.aspx");

veya

<asp:Image ID="image1" runat="server" ImageUrl="~/images/logo.gif"/>

örneklerinde olduğu gibi.

 

Herkese iyi kodlamalar...