Sınıf Türleri
Nesneye yönelimli programlama için sınıf yapısı bir önceki bölümde de detaylı olarak ortaya konulduğu gibi kritik önemdedir. Özellikle belleği etkin kullanmak, program içinde her şeyin sınıflar, sınıflara ait nesneler ve metotlar üzerinden yönlendirilmesi tüm bu süreç için bellek ortamından etkin bir şekilde faydalanılması nesne yönelimli programlamanın en önemli avantajı ve karakteristik özelliğidir.
Sınıf veri üyeleri (sabitler ve alanlar), işlev üyeleri (Yöntemler, özellikler, olaylar, dizin oluşturucular, işleçler, örnek oluşturucular, yıkıcılar ve statik oluşturucular) ve iç içe türler içerebilen bir veri yapısıdır. Sınıf türleri, türetilmiş bir sınıfın bir temel sınıfı genişletebileceği ve özelleştirileceği bir mekanizma olan devralmayı destekler.
C#’da beş farklı erişim değiştirici mevcuttur. Bunlar sırasıyla kamuya yani herkese açık kullanım (public), korumalı kullanım (protected), dahili kullanım (internal), korumalı dahili kullanım (protected internal), özel kullanım (private), şeklindedir.
Derleme birimlerinde veya ad alanlarında belirtilen türler olabilir public veya internal erişebilir. Varsayılan olarak internal erişim'dir. Sınıflarda belirtilen türlerin, public protected, internal protected, internal veya private erişimi olabilir. Varsayılan olarak private erişim’ dir. Yapılarda belirtilen türlerin public, internal veya private erişimi olabilir. Varsayılan olarak private erişim’dir. Bir sınıfı deklare etmek (class_declaration) , isteğe bağlı olarak bir sınıf değiştiricileri dizisi içerebilir. Aynı değiştiricinin bir sınıf bildiriminde birden çok kez görünmesi için derleme zamanı hatası vardır. Bu değiştiriciler şu şekilde ifade edilebilir: : 'new' | 'public'| 'protected'| 'internal' | 'private' | 'abstract' | 'sealed'| 'static'| class_modifier_unsafe.
Konu kapsamında statik sınıflar ve sınıf üyeleri, kısmi sınıflar (partial classes) ve iç içe sınıflar (nested classes) açıklanmaktadır.
Soyut Sınıflar (ABSTRACT CLASS)
Veri soyutlama, belirli ayrıntıları gizleme ve kullanıcıya yalnızca temel bilgileri gösterme işlemidir. Soyutlama, soyut sınıflar veya arayüzler ile gerçekleştirilebilir (Nesne Yönelimli Programlama II dersinizde detaylandırılacaktır.). abstract değiştirici, bir sınıfın tamamlanmamış olduğunu ve yalnızca temel sınıf olarak kullanılması amaçlanan olduğunu göstermek için kullanılır. Soyut anahtar kelime, sınıflar ve yöntemler için kullanılır.
Soyut sınıf: Nesneler oluşturmak için kullanılamayan kısıtlı bir sınıftır (ona erişmek için başka bir sınıftan miras alınması gerekir).
Soyut yöntem: Yalnızca soyut bir sınıfta kullanılabilir ve bir gövdesi yoktur. Gövde, türetilmiş sınıf tarafından sağlanır (kalıtsal).
Soyut bir sınıf doğrudan başlatılamaz ve bir derleme zamanı hatası, new işleci bir soyut sınıfta kullanılır.
Mühürlü Sınıflar (SEALED CLASS)
Nesneye yönelimli programlamanın en önemli özelliklerinden birisi olan bir sınıftan başka sınıflar üretebilme durumu, güvenlik gibi çeşitli sebepler ile istenmeyebilir. Bu sınıflardan türemenin istenmemesi durumunda sınıfın başına mühürlendiğini yani bu sınıftan türetme yapılamayacağını gösteren sealed anahtar sözcüğü kullanılır.
Bu sayede de sabit özellikler ve metotlara sahip olan sınıflar elde edilebilir. Bu duruma uyulmadığında yani bir mühürlü sınıf, başka bir sınıfın temel sınıfı olarak belirtilmişse, derleme zamanı hatası ile karşılaşılmaktadır. Ayrıca mühürlü bir sınıf de soyut bir sınıf olamaz.
Statik Sınıflar ve Üyeleri
C#’da statik, somutlaştırılamayan bir şey anlamına gelir. Statik bir sınıfın nesnesini oluşturamazsınız ve bir nesne kullanarak statik üyelere erişemezsiniz.
C# sınıfları, değişkenler, metotlar, özellikler, operatörler, olaylar ve yapıcılar, static değiştirici anahtar sözcüğü kullanılarak statik olarak tanımlanabilir.
Statik bir sınıf, temelde statik olmayan bir sınıfla aynıdır, ancak bir fark ile; statik bir sınıf somutlaştırılamaz. Başka bir deyişle, sınıf türünde bir değişken oluşturmak için new anahtar sözcüğünü kullanamazsınız. Statik bir sınıf, sealed veya abstract değiştiricisini içeremez. Ancak, statik bir sınıf tarafından örneklenemez veya türetilmediği için, hem korumalı hem de soyut gibi davranır. Statik bir kurucu yalnızca bir kez çağrılır ve statik bir sınıf, programınızın bulunduğu uygulama etki alanının ömrü boyunca bellekte kalır.
Aşağıdaki listede, statik bir sınıfın ana özellikleri ifade edilmektedir:
Statik bir sınıf yalnızca statik üye(ler) içerir.
Örneklenemez, yani statik sınıfın bir örneği oluşturulamaz.
Mühürlüdür ve mühürleme, sınıfların ve arayüzlerin izin verilen alt türleri üzerinde daha fazla kontrole sahip olmasını sağlar. Bu, hem genel etki alanı modellemesi hem de daha güvenli platform kitaplıkları oluşturmak için kullanışlıdır.
Statik bir sınıf örnek oluşturucuları (Instance Constructors) içeremez.
Statik sınıflar mühürlenir ve bu nedenle miras alınamaz. Nesne dışında herhangi bir sınıftan miras alamazlar. Statik sınıflar, bir örnek oluşturucu içeremez; ancak, statik bir kurucu (static constructor) içerebilirler.
Statik Üyeler; statik olmayan bir sınıf, statik yöntemler, alanlar, özellikler veya olaylar içerebilir. Sınıfın hiçbir örneği oluşturulmamış olsa bile bir sınıfta çağrılabilir. Statik üyeler, statik üyeye ilk kez erişilmeden ve varsa statik kurucu çağrılmadan önce başlatılır.
Statik Alanlar; statik olmayan bir sınıftaki statik alanlar, static anahtar sözcüğü kullanılarak tanımlanabilir. Statik olmayan bir sınıfın statik alanları tüm örnekler arasında paylaşılır.
Statik Metotlar; statik olmayan bir sınıfta bir veya daha fazla statik yöntem tanımlayabilirsiniz ve bir nesne oluşturmadan çağrılabilir. Statik yöntemler yalnızca diğer statik yöntemleri çağırabilir ve statik üyelere erişebilir.
Statik Yapıcılar; statik olmayan bir sınıf, parametresiz bir statik kurucu içerebilir. Statik anahtar kelime ile ve public, private ve protected gibi erişim değiştiricileri olmadan tanımlanabilir. Aşağıdaki örnek, statik oluşturucu ve örnek oluşturucu arasındaki farkı örnek kodlar üzerinden görülebilir.
Kısmi Sınıflar (PARTIAL CLASS)
Kısmi sınıf (partial class), tanımı iki veya daha fazla dosyada bulunan bir sınıftır. Her kaynak dosya, sınıfın bir bölümünü içerir ve uygulama derlendiğinde tüm parçalar birleştirilir. C#’da kısmi sınıfları kullanmanın en önemli avantajları arasında; büyük projeler üzerinde çalışırken, bir sınıfı ayrı dosyalara yaymak, birden fazla programcının aynı anda üzerinde çalışmasına olanak tanıması şeklinde ifade edilebilir.
İç İçe Sınıflar (NESTED CLASS)
Nesneye yönelik programlama dilleri kullanıcıya bir sınıf içerisinde başka bir sınıf tanımlama olanağı sağlar. Bu tür sınıflara Nested Class (gömülü sınıf yani iç içe sınıf) adı verilir. Gömülü sınıflar statik ve statik olmayan gömülü sınıflar olmak üzere ikiye ayrılırlar. Statik olmayan gömülü sınıflara Inner Class(İç Sınıf) adı verilir. İç içe sınıfların mantıksal gruplanması, daha iyi kapsülleme ve kod okunabilirliği yönünden üç temel faydası vardır.