.NET 2.0 ile birlikte nongeneric koleksiyonların generic versiyonları çıkarıldığı gibi yeni koleksiyon sınıfları da geliştirildi. Aşağıdaki tabloda yeni nesil generic sınıfları ve bunlara karşılık gelen klasik koleksiyon sınıfları gösterilmiştir. Read the rest of this entry »
.NET 2.0 ile birlikte gelmiş en güçlü özelliklerinden biri hiç şüphesiz C++’taki template konseptiyle benzerlik gösteren generic yapısının destekleniyor olmasıdır. .NET uygulamalarında değer ve referans olmak üzere iki tür veri türü kullanılacağını biliyoruz. Bazı durumlarda aynı değişkende hem değer hem de referans türünde veriler barındırmak isteyebiliriz. Bu durumda Framework’teki bütün veri türlerinin türediği System.Object türü kullanılır. Bütün veri türleri, temelde object türünde olduğu için bir değişkenin hem değer hem de referans değerleri koruması için değişkenin türünü object olarak set ederiz. Bu yöntem, çoğu zaman kullanışlı görünse de beraberinde performans kaybını getirir. Bir programda iyi performans sağlamanın bir yolu da geçici olarak tuttuğumuz verileri memory üzerinde en doğru tiplerle barındırmaktır. Yani integer olarak strack üzerinde korumamız gereken “456″ değerini object türünde heap üzerinde depolamamız mantıklı bir çalışma olmaz. Ve en önemlisi object türüne değer atarken veya bu türden değer okurken, CLR değerini gerçek tipini yakalayarak boxing, unboxing işlemleri yapar. Bu da CPU bacağında ek yük oluşturmaktadır.
Bu şekilde çalışan veri türlerinin başında koleksiyon sınıfları gelmektedir. Önceki bölümlerde işlediğimiz koleksiyon nesneleri, elemanları doğrudan object türünde barındırır. Sadece numeric değerleri tutmak istesek bile bu değerler koleksiyonlar tarafından object olarak tutulur. Bu değerleri, başka işlemlerde kullanmak üzere okumak istediğimiz casting işlemi yaptırmak gerekir. Oysa veriler, koleksiyon içerisinde oldukları gibi yani integer türünde durmuş olsalarda boxing, unboxing, casting gibi performans kaybına neden olan işlemler olmayacaktı. .NET 2.0 ile birlikte bu sorun, Generic denilen mimariyle giderilmiş oldu. Read the rest of this entry »
Bu yazıda .NET 2.0 ile birlikte gelmiş ve .NET dillerinin üstünlüğünün bir özelliği olarak görülen Generic veri tiplerini işleyeceğiz. Öncelikle konuyla ilgili koleksiyon sınıfları hakkında bir özet geçmemiz faydalı olacaktır.
Bilindiği gibi .Net Framework, koleksiyonları tanımlamak ve amacına uygun kullanmak için birçok sınıf sunar. System.Collections namespace’in altında bulunan bu sınıflar, ArrayList, HashTable, SortedList, Queue, Stack ve BitArray dır. Koleksiyonlar, Array kullanımına göre daha esnek ve dinamik bir yapıya sahiptir. Read the rest of this entry »
Bilindiği gibi değişken tipleri, depolanma durumları ve davranışları bakımından değer ve referans olmak üzere ikiye ayrılır. Bu iki veri tipi arasındaki önemli bir farktan bahsedeceğiz; referans türlerinin null(nothing) değeri alabiliyorken değer türlerinin bu özelliği taşımıyor olmasıdır. Yani değer türleri, her zaman bir değer taşımak zorundadır. Bir değişkenin, null olması, herhangi bir nesneye işaret etmiyor olduğu anlamına gelir. Özellikle veritabanı işlemlerinde null tabanlı kolonlarla çalışıldığında veya uygulama içerisinde değişkenlerin herhangi bir değer taşımaması gereken durumlarda bu özellik önem kazanmaktadır. Örneğin boolean türünde bir değişkenin değerini veritabanına göndereceğimizi düşünelim. Kullanıcı bu değeri, ya false ya da true olarak set edecektir. Peki, kullanıcının bu değeri set etmeden önce bu değişkenin default değeri ne olacak veya kullanıcı hiçbir şekilde bu değişkenin değerini set etmediyse veritabanına hangi değer gönderilecek. Read the rest of this entry »
Gelişmiş veritabanı sistemleri, transaction işlemlerinde Savepoint denilen kaydetme noktaları tanımlama imkanı verir. Transaction birden fazla iş parçacığından oluştuğu için başarılı biten her iş parçacığının bitiş noktasını savepont olarak işaretlemek, özellikle karmaşık transaction işlemlerinde Rollback işleminin yükünü hafifletir. Çünkü bu durumda transaction içinde Rollback yapmak gerektiği zaman transaction, en başa geri sarılmak yerine sadece belirli bir savepoint noktasına geri döndürülür. Read the rest of this entry »
ADO.NET 2.0 ile birlikte programcının yerel ve dağıtık transaction işlemlerini daha kolayca yönetebilmesi için System.Transactions.dll kütüphanesi sunuldu. ADO.NET 2.0′da LightWeight Transaction(LT) ve OLE Transaction(OleTx) olmak üzere iki transaction modeli geliştirildi.
LightWeight Transaction, tek veri kaynağı üzerinde sorgulama yapılırken kullanılan transaction modeli, OleTx Transaction ise dağıtık transaction yapısında olup ayrı veri kaynakları üzerinde işlem yapılırken kullanılan modeldir.
Bu yeni transaction sistemini kullanabilmek için projemize System.Transactions.dll dosyasını referans olarak eklememiz gerekir. Read the rest of this entry »
DbTransaction nesnesi, veritabanı sistemine gönderdiğimiz sorguya ait transaction yönetimini sağlamak için kullanılır. Bilindiği gibi transaction(işlem) kavramı, veritabanı yönetim sistemlerinde önemli bir yere sahip olup birbirleriyle ilişkili iş parçacıklarının bulunduğu mantıksal bir birim olarak düşünebilir. Transaction yönetimi, aynı iş parçacığında seri bir şekilde yürütülecek sorguların hatasız bir şekilde sonuçlanıp sonuçlanmadığının kontrolünü sağlar. Klasik bir örnek olarak banka sisteminde havale uygulamasını ele aldığımızda ilk önce havaleyi yapan kişinin hesabından ilgili miktar düşürülür ve havale yapılan kişinin hesabına o kadar miktar eklenir. Dışarıdan basit görünen bu sürecin herhangi bir halkasında meydana gelecek bir hata kaynak veya hedef siteminde bilgi tutarsızlığına neden olacaktır. Bu yüzden bu işlemlerin transaction yönetiminde gerçekleştirilmesi gerekir. “Ya hep ya hiç” mantığıyla çalışan transaction işleminin esas amacı “veri bütünlüğü” olup, süreç içerisinde istenmeyen bir durum olduğu zaman önceki iş parçacıklarının geri alınmasıdır. Yani süreç, başlangıç noktasına geri döndürülür ve süreç içindeki hiçbir iş parçacığının gerçekleşmemiş olduğu kabul edilir. Büyük ölçekli VTYS’lerde dahili transaction yönetimi bulunmaktadır. Örneğin SQL Server’da çalıştırdığımız bir UPDATE veya DELETE işlemi esnasında herhangi bir kesinti olduğu zaman o zamana kadar gerçekleştirilmiş güncelleme veya silme işlemleri geri alınır ve veriler eski haline geri dönmüş olur. Bu geri alma işlemine ROLLBACK(geri sarmak), işlemler hatasız çalıştığı durumda değişikliklerin kalıcı hale getirilmesine COMMIT(işlemek) denilir. Read the rest of this entry »
Windows ortamında geliştirdiğimiz desktop tabanlı exe programındaki her formun task barında standart pencere yönetim menüsü çıkar. Pencerenin ikonu tıklandığında, title bar veya taskbar sağ tıklandığında görünen bu sistem menüsü formun türüne göre farklılık gösterse de genellikle, Restore, Move, Size, Minimize, Maximize ve Close eventleri içerir. Uygulamalarımızda bu menüyü yönetmek isteyebiliriz örneğin oradaki default menüden bazılarını disable etme ihtiyacı doğabilir veya birçok programda gördüğümüz “About” bölümünü ekleyebiliriz. Sistem menüsünü yönetmek için .NET plaftormunda özel bir kütüphane bulunmamaktadır. Bunu sağlamak için Windows API’si kullanılır. Read the rest of this entry »
Bir desktop uygulaması yazılırken uygulama içerisinde ana bir Form(Main Window) üzerinden birden fazla Form açıp kapatma ihtiyacımız doğar. İkinci formu açarken modal(kipli) veya modeless(kipsiz) pencere tipi kullanılır. Modal olarak açılmış pencereler, pencere kapatılmadığı sürece alttaki pencerelere erişime izin vermeyendir. Programlardaki “Dosya Aç” penceresi bu türden bir penceredir. Bu penceredeki işimizi bitirip pencereyi kapatmadığımız sürece programın diğer ekranlarına geçemeyiz. Modeless olarak tanımlanmış pencere tipinde ise ikinci pencere açıkken de alttaki pencereye erişilir (Non-Modal Windows). Word programındaki “Find and Replace” penceresi bu türden bir penceredir. Modal pencere tipini daha çok dialog window denilen iletişim kutuları için tercih ederiz. İletişim kutuları kullanıcıya bir uyarı vermek veya kullanıcıdan bilgi girişi almak için hazırlanmış özel pencerelerdir. Bir Main form üzerinde alt formları açmak için de Modeless pencere tipi yaygın olarak kullanılır ama bazen de Modal pencere tipi de tercih edilir. Peki bu durumda bu basit farkın dışında neye dikkat edilmelidir. Read the rest of this entry »
Web uygulamalarımızda form kontrollerini, kullanıcının müdahelesini engellemek için readonly veya disable ederiz. Bütün ASP.NET Web kontrollerinin Enabled property’si bulunur. Bu property’inin değerini false olarak seçtiğimizde kontrol, HTML elementi olarak render edildiği zaman disabled niteleğiyle işaretlenmiş olur.
Server tarafında bu şeklinde tanımlanmış kontroller, aşağıdaki şekilde render edilir.
Bu durumda IE veya Firefox tarafında bu elementler gri modda görünecek ve kullanıcının bu kontrollere fokuslanması veya değerini değiştirmesi engellenmiş olacaktır.
Textbox kontrolünde bu property’e ek olarak ReadOnly property’si bulunur. CheckBox, RadioButton, DropDownList, RadioButtonList, CheckBoxList gibi kontrollerde bulunmayan bu property, TextBox kontrolünün sadece okunabilir olmasını sağlar. Bu durumda TextBox kontrolü browser içerisinde gri modda girmeyecek(içindeki metnin rengi gri olmayacak) aynı zaman kullanıcının bu kontrole fokuslanmasına izin verilmiş olacaktır. Disabled gibi readonly durumunda da kullanıcı, kontrolün değerini değiştiremez. Disable ile ReadOnly arasındaki bu basitten farktan daha önemli bir fark bulunmaktadır. Read the rest of this entry »



Recent Comments