2.0’dan önceki C# sürümlerinde bir delegate’i tanımlamak için daha önce tanımlanmış bir metod(named method) kullanmak gerekirdi. C# 2.0 ile birlikte C++’taki inline metodlar gibi isimli metod zorunluluğu ortadan kaldırılmış olup isimsiz metod da kullanılma imkanı sunulmaktadır. Anonymous Method sayesinde bir kod bloğunu, delegate tanımlamasında parametre olarak geçebileceğiz. Delegate çalıştığı zaman kendisine parametre olarak geçilmiş kod bloğunu çalıştırır. Okumaya devam et
Kategori arşivi: C#, VB.NET, ASP.NET
DataTable-DataSet LoadOption Enumeration [C#, VB.NET]
ADO.NET 2.0 ile gelen yeniliklerden biri olan System.Data.LoadOption numaralandırıcısı, veri kaynağından alınmış kayıtların, Load() veya Fill() metodu kullanılarak var olan ve üzerinde primary key tanımlı veri tablosuna yüklenirken aynı kayıtlara rastlanıldığında nasıl davranılacağını belirtir. Değer olarak aşağıdaki seçeneklerden birini alır.

Okumaya devam et
DataTable’de Değişen Kayıtların Bilgisi [VB.NET, C#]
DataTable, DataSet, DataRow gibi nesnelerdeki satırların durumu hakkında bilgi almak herhangi bir güncelleme olmuşsa hangi aşamada olduğunu öğrenmek için System.Data.DataRowState ve System.Data.DataRowVersion kavramları kullanılır. Okumaya devam et
ADO.NET’te MARS özelliği [VB.NET, C#]
MARS(Multiple Active Result Sets), ADO.NET 2.0 ile birlikte geliştirilmiş olup tek connection üzerinden birden fazla query veya stored procedure(multiple queries) çalıştırmaya izin veren bir özelliktir. Bu özelliği kullanarak aynı bağlantı nesnesini kullanarak birden fazla veri seti üzerinde forward-only, read-only işlemler yapılabilir. Okumaya devam et
ASP.NET Page Life Cycle (Sayfa Yaşam Döngüsü)
ASP.NET tabanlı site hazırlarken gerek sunucu ile istemci arasındaki işleyişi izlemek gerekse web tabanlı özel kontrol geliştirirken request-response sürecindeki yol haritasını, Asp.NET yaşam döngüsünü bilmek sürece olan hakimiyetimizi artıracaktır. Asp.NET’in sayfa yaşam döngüsünde her request işleminde page nesnesi ve içindeki kontroller yeniden oluşturulur ve işlem sonucunda yok edilir. Bu oluşma-yok olma sürecinde bazı evre ve olaylar gerçekleşir. Bu evre ve olaylar, sayfa ve sayfa içerisindeki kontrollerin yaşam döngüsüyle ilintilidir. Burada Asp.NET yaşam döngüsünü hatırlayacak kadar burada özetlememiz faydalı olacaktır. Aşağıdaki tabloda sayfa ve kontrol bazlı yaşanan evreler gösterilmiştir. Okumaya devam et
Generic Türler (Generic Delegate) -IV
.NET 2.0 ile birlikte delegate(temcilsi) yapılarını da generic olarak tanımlama şansı elde etmiş olduk. Delegate, bir olay gerçekleştiği zaman bunu ilgili yerlere(metodlara) bildiren temsilcilerdir. Delegate tabanlı işlem yapılacağı zaman öncelikle delegate türünde bir temsilci metod tanımlanır ardından sözkonusu olay gerçekleştiği zaman bu temsilcinin bilgilendirme yapacağı metodlar, temsilci metodun listesine eklenir. Çalışma zamanında olay(event) gerçekleştiği zaman temsilci metod yani delegate çağrılır. Temsilci metod da hangi metodları temsil ediyorsa onları tetikler, onları gerçekleşen bu event’ten haberdar eder. Delegate yapılarını, daha sonra “Delegate & Event” konulu bir makalede işleyeceğiz. Okumaya devam et
Generic Türler (Generic Types) -III [Generic Koleksiyon Sınıfları]
.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. Okumaya devam et
Generic Türler (Generic Types) -II
.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. Okumaya devam et
Generic Türler (Generic Types) -I
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. Okumaya devam et
Nullable Veri Türleri (Nullable Data Types) [C#-VB.NET]
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. Okumaya devam et