• Malik Masis

C#’ta Benzer Tip, Fonksiyon, Nesne ve Anahtar Kelimeler

S.A. Arkadaşlar,

Bugün bir derleme yazısı ile karşınızda olacağız. Daha önce yazdığımız ne nedir, sonarlint ile kod analizi, yazılımcılar için mülakat soruları gibi derleme yazılarımız olmuştu. Bugün onlara yeni bir tanesini ekleyeceğiz. Diğer yazılarda olduğu gibi bunu da mümkün mertebe güncel tutmaya çalışacağız. Bugünkü yazımız birbirine benzeyen tip, fonksiyon, nesne ve keyword gibi yapıların aralarındaki bazı önemli farkları kısaca açıklamaya çalışacağız. Ayrıca her birinin sonunda konuyu daha ayrıntılı okuyabileceğiniz yazılar da koymaya gayret ettik. Hazırsak başlayalım…

ToLower — ToLowerInvarint: C#’ta bir çok Invarint kullanımı var. Bu sadece ToLower için değil diğer kullanımlar için de geçerli olacaktır. Invarint ifadesi global terimlerde kullanılması tavsiye edilir. Şöyle ki, bir ifade herhangi bir dilden bağımsız ise kullanılmalıdır, fakat bir dile özgü kullanıcıdan alınan bir girdi olursa o zaman normal metod kullanılmalıdır. Aksi halde o ülkeye ait olan özel karakterler silinecektir. [ Dahası]

CurrentCulture — CurrentUICulture: CurrentCulture .Net tarafından sistemin yerel ayarlarından almaktadır. Numara (özellikle para ile ilgili işlemlerde virgül ve nokta kullanımı açısından önemlidir) ve tarih formatları gibi şeyleri kontrol eder. CurrenctUICulture ise Windows tarafından uygulamaların ayarları ile ilgilidir. Çoğu zaman ikisi aynı şeylerdir, fakat bazen numara ve tarih ayarlarını Türkçe yapıp geri kalan yerlerde İngilizce kullanabilirsiniz. O zaman bahsettiğimiz farklılıklar ortaya çıkacaktır.

[ Dahası]

Field — Property: Field’leri genel olarak private veya protected olarak kullanmalı. Bunlara erişim metod, property ve benzeri yöntemlerle erişilebilir olmalıdır. Bu şekilde dışarıdan erişimlere izin vermemiş olursunuz. Property ise bir üyenin değerini okumak yazmak veya değiştirmek için kullanılan daha genel bir yapıdır. Genelde public olarak kullanılmasına karşın esneklik ve güvenliği sağlar. [ Dahası]

var — dynamic: var C# 3 ile gelen ve değişkenin tipini build time’de belirten keyword’dür. Örneğin nesneyi string bir değişkene çevirdiniz. Bunu intellisense özelliği sayesinde build time’de string özelliklerini yansıtacaktır ve string metodları görüntüleyebileceğiz. dynamic ise C# 4 ile gelen ve değişkenin tipini run time’de belirten bir keyword’dür. Aynı örnek üzerinden devam edersek, nesneyi string’e dönüştürmüş dahi olsak tipinin değişebilmesi sebebiyle string metodlarını göstermeyecektir, fakat herhangi bir değişiklik yapılmayıp bu metodlar çağrılırsa doğru olarak çalışacaktır. Genelde reflaction ile kullanımına şahit oldum. [ Dahası]

const — readonly: const sabit olan değerlerde kullanılması gereken bir keyword’dür. Başlangıçta değer vermek zorundayız. Çünkü daha sonra herhangi bir şekilde bu değerin değişmeyeceğini garanti etmekteyiz. readonly ise yine benzer bir işi yapmakla birlikte, farklı olarak ilk değer almak zorunda olmayıp sadece constructor içinde değişebilen keyword’dür. Dependency Injection yapılarında sıklıkla kullanılır. [ Dahası]

as — classic cast (): classic cast ile bahsettiğimiz şey “(ClassName) obj” tam olarak budur. Buradaki cast işleminde herhangi bir hata oluştuğunda “InvalidCastException” hatası fırlatacaktır. as ile “obj as ClassName” gibi bir cast işlemi yaptığımızda ise cast işlemi hatalı olduğunda nesneyi null olarak set etmektedir. Bunlardan biri diğerinden daha iyidir demekten ziyade kullanım alanına göre değişkenlik göstermektedir. Hatayı yakalamanın maliyeti fazla olacağından classis cast işlemi çok daha hızlı olmaktadır, fakat as ile yapılan işlemlerde de program hata fırlatmayacaktır. Bunu göz önünde bulundurmakta fayda var. [ Dahası] [ Dahası]

IEnumerable IQueryable: İki yapı genel olarak birbirine çok benzese de birbirinden ciddi farklar içerir. Oluşturulan bir sorgudan çıkan sonuçları dahi aynı olan iki yapıdan bahsediyoruz, ama arka planda çalışma prensipleri farklı. IEnumerable oluşan sorguyu filtresiz bir şekilde veri tabanına gönderir ve gelen veri arasında istenilen kısmı kullanıcıya gösterirken IQueryable ise sorguyu direkt olarak veri tabanında çalıştırır ve sadece istenilen veriyi getirir. Burada da biri diğerinden iyi demekten ziyade nerede hangisini kullanmamız gerektiğiyle alakalıdır. [ Dahası]

Action — Func: Delegeler, metodların referans yoluyla yerlerini tutan yapılardır. Benzer imzalarda bulunmak şartıyla birden fazla imza da tutabiliyoruz.Action dönüş tipi olmayan (void), Func ise dönüş tipi generic olan özel delege yapılarıdır. 16'ya kadar parametre alabilirler. [ Dahası]

Covariance<out T> — Contravariance<in T>: Bahsedilen iki yapı da generic interface’lerle kullanılır. Fakat interface out keyword ile tanımlarsa onu implemente eden sınıf dönüş tipi sadece T olan metodlar döndürebiliyor, in keyword’ü kullanıldığında ise T tipi sadece parametre olarak kullanılabilinmektedir. [ Dahası]

Kullandığımız yapıların eksi ve artı yönlerini iyi bilmek dileğiyle…

2 views0 comments

Recent Posts

See All