Ana içeriğe atla

Readonly ve Const Değişken arasındaki fark nedir ?

Bu yazımda günlük kullanımda genellikle karıştırılan tipler olan readonly ve const değişkenleri inceliyor olacağız.

Öncelikle bu tipleri temel anlamda inceleyelim.

Readonly : Gerçek zamanlı olarak uygulamamız çalışırken güncellenebilir. Fakat bu güncellenme işlemi sadece contructor da yapılabilir. Constructor metodumuzda readonly değişkeni dilediğimiz kadar güncelleyebiliriz.


Const : Sadece uygulama derleme öncesi bir değer ataması yapabilir. Sonrasında uygulama çalışması esnasında bir güncelleme yapamayız.



Kullanım Alanları 

Const : 

Genel kullanım aşağıdaki şekildedir : 

public class Urun{

const string urunBirimi = "Adet";
const bool garantiDurumu =true;

/*
.
.diğer tanımlamalarımız burada
.
*/

//constructor
public Urun(){



}//Constructor Kapanış

}//Class Kapanış





Aşağıdaki şekilde kullanımı yapamayız : 


public class Urun{


/*Burada bir hata alıyor olacağız. Atama işlemi program çalıştırılmadan önce yapılmalıdır şeklinde.*/
const string urunBirimi ;

const bool garantiDurumu =true;

/*
.
.diğer tanımlamalarımız burada
.
*/

//constructor
public Urun(){

/*burada da uygulama çalışması esnasında atama yapamadığımız için bir hata alıyor olacağız.*/
this.urunBirimi = "Kilogram";

}//Constructor Kapanış

}//Class Kapanış


Özet:
Özet olarak yalnızca uygulama bazında genel tanımlamalarımız için const değişken tiplerini kullanırız.




Readonly : 

Genel kullanım aşağıdaki şekildedir : 

public class Urun{

/*varsayılan değeri olarak Adet belirleniyor */
readonly string urunBirimi = "Adet";
readonly bool garantiDurumu =true;

/*
.
.diğer tanımlamalarımız burada
.
*/

//constructor
public Urun(string _urunBirimi, bool _garantiDurumu){

/*Constructor içerisinde ilgili class ı oluştururken değer ataması yapabilir class ın hareket durumları ve tanımlama birimini belirleyebilirsiniz. */
this.urunBirimi = _urunBirimi;
this. garantiDurumu =  _garantiDurumu;

}//Constructor Kapanış

}//Class Kapanış





Aşağıdaki şekilde kullanımı yapamayız : 


public class Urun{

readonly string urunBirimi ;

readonly bool garantiDurumu =true;
readonly urunAdi;

/*
.
.diğer tanımlamalarımız burada
.
*/

//constructor
public Urun() {

//constructor içerisinde tanımlama yapabiliyoruz..
this.urunBirimi = "Kilogram";

}//Constructor Kapanış


public UrunEkle(string urunAdi,string urunBirimi, string garantiDurumu){
this. urunAdi = urunAdi;


/*Aşağıdaki iki atama işleminde hata alıyor olacağız. Çünkü readonly değişkenler constructor dışında değiştirilemezler.*/
this.urunBirimi = urunBirimi;
this.garantiDurumu  = garantiDurumu;

}


}//Class Kapanış


Özet:
Özet olarak uygulamamız içerisinde class nesne örneklerinin oluşturulmaları esnasında nesnelerin kimliklerini ve hareket kabiliyetlerini belirlemek istiyor ve sonrasında uygulama akışında ilgili değişkenlerin değiştirilmemesini istiyor isek readonly değişkenleri kullanabiliriz.

Readonly ve Const Arasındaki Temel Farklar

 - Const tipine sadece tanımlama sırasında değer atanır, readonly tiplerine tanımlanırken ve constructor metodları içerisinde değer ataması yapılabilir.

 - Const tipleri metodlar içerisinde tanımlanabilir, fakat readonly tiplerini metodlar içeirsinde tanımlayamayız.

 - Const tipini statik anahtar kelimesi ile statik metod ve tanımlama olarak kullanamayız fakat readonly tipleri statik olarakta kullanabiliriz.

 - Const tipleri sadece derleme aşamasında tanımlanan sabitlerdir, readonly tipleri uygulama çalışma zamanında tanımlanan sabitlerdir.



Örnek : (Dependency Injection,  Readonly Değişken Kullanımı)

Biraz daha üst seviye bir örnek vermek gerekir ise Dependency Injection Design Pattern ını implemente ederken, soyut tipleri sadece constructor da değiştirmemiz ve uygulamanın geri kalanında ilgili değişkenlerin değiştirilmemesi gerekir. Bunun için readonly değişkenleri kullanabiliriz.


public interface IDBUrun{

void Ekle(string urunAdi);

void Guncelle(string urunAdi, string urunDurumu);

void Sil(string urunAdi);

}//Class Kapanış



public class DBUrun : IDBUrun {

void Ekle(string urunAdi){

//ürün ekleme kodları
}

void Guncelle(string urunAdi, string urunDurumu){

//ürün Güncelleme kodları
}

void Sil(string urunAdi){

////ürün silme kodları
}



}//Class Kapanış



public class Urun{

private readonly IDBUrun dbUrunIslem = null;


//constructor
public Urun(IDBUrun _IDBUrun){

//dependency injection ile constructor da ilgili soyut class ımızı implemente ediyoruz.
this.dbUrunIslem = _IDBUrun;

}


void UrunEkle(string urunAdi){

//dependency injection ile elde ettiğimiz class ımızın ekle metodunu kullanıyoruz.
this. dbUrunIslem.Ekle(urunAdi);

}


}//Class Kapanış














Bu blogdaki popüler yayınlar

SQL DATEADD() Fonksiyonu(Sql de tarihe ay,gün,yıl ekleme)

Kullanım Kalıbı : DATEADD (datepart , number , date ) . datepart ksımına month,year,day vs artırmak istediğimiz tarih birimini yazıyoruz. . number ksımına arttırmak istediğimiz miktarı yazıyoruz. . date kısmına da hangi tarih e ekleneceğini belirtiyoruz. Örnek olarak şu an ki tarihten 1 ay sonrasını görmek için : Şu anki tarih '10-1-2011' olsun(gün,ay,yıl) Sorgu : SELECT DATEADD(MONTH,+1,GETDATE()) Çıktı alacağımız tarih : '10-2-2011' şekinde olacaktır.

Sql IDENTITY_INSERT Kullanımı

Sql de bazen veri taşıma veya benzeri bir durumda aktarmak istediğimiz tablo kayıtlarını identity field olan ID leri ile aktarmak isteriz.Fakat sql server buna izin vermez.Bu Identity alana insert işlemi için aşşağıdaki gibi bir işlem uygulayabiliriz. Örnek Olarak aşşağıdaki sorguda eski tablomuza yeni başka bir tablo kayıtlarını aynen aktarıyoruz. SET IDENTITY_INSERT tabloadı ON -- identity insert yapılabilir konuma geliyor INSERT INTO eskiTablo SELECT * FROM yeniTablo SET IDENTITY_INSERT tabloadı OFF -- identity insert yapılamaz konumuna geliyor

Netsis NetOpenX50 Nesnesini C# Visual Studio Üzerinde Çalıştırma

Netsis ile sipariş, ürün, fiyat, stok entegrasyonları yaparken NetOpenX apisini kullanmamız gerekiyor. Netsis kullanan bir firma ile entegrasyon geliştirmeden önce yapmamız gereken şey firmanın netopenx api lisansı alıp almadığını öğrenmeliyiz.Bunu onaylattıktan sonra Visual Studio projemize NetOpenx50 dosyasını referans olarak eklemek kalıyor. Projemize referans eklemek için öncelikle NetOpenX50.dll ini bilgisayarımıza indiriyoruz.Ardından komut sataırına girerek aşağıdaki komutu vermeliyiz. regsvr32 C:\Netsis\NetOpenX50.dll Bu işlem sonrasında NetOpenX50 dosyamızı com objesi olarak işletim sistemimize kayıt etmiş oluyoruz. Hemen ardından visual studio projemizi açarak projenin üzerinde References kısmına sağ tuş tıklayarak yeni referens ekle diyoruz.Ardından çıkan pencereden sol panelden COM objelerini seçiyoruz ve orada "NetOpenX50 Kütüphanesi" alanı zaten çıkıyor ve direk seçip referans olarak projemize ekleyebiliyoruz. NetOpenX50 apisinin kullanımı için her d...