C# programlama dilinde Class ve Struct yapılarının kullanım amaçları ve işlevleri farklıdır Class'lar, büyük projelerde kullanılır ve kapsülleme ve kalıtım özellikleri sayesinde kodun sürdürülebilirliğini arttırır Struct'lar ise performansı arttırmak için kullanılır ve bellekte stack hafızada tutulurlar Her iki yapı da özellik ve metotlarla verileri gruplamak için kullanılabilir Class'ların kapsülleme ve kalıtım özellikleri sayesinde daha okunaklı, anlaşılır ve güvenli kod yazılabilir Struct'lar ise daha az bellek tüketen ve daha hızlı bir yapıya sahiptirler
Bu yazıda, C# programlama dilinde Class ve Struct kullanımını inceleyeceğiz. İki yapıda da verileri gruplamak ve nesne tabanlı programlama yapmak mümkündür. Ancak Class ve Struct'ların kullanım amaçları ve işlevleri birbirinden farklıdır.
Class'lar, nesne tabanlı programlamanın temel yapılarından biridir ve özellikle büyük yazılım projelerinde kullanılırlar. Class'lar, kapsülleme ve kalıtım özellikleri sayesinde kodun daha okunaklı, daha anlaşılır ve daha sürdürülebilir olmasını sağlarlar. Kapsülleme sayesinde sınıf içindeki özellik ve metotlara diğer sınıflardan erişim kontrolü sağlanır, böylece kodun güvenliği artmış olur. Kalıtım sayesinde de sınıflar birbirinden türemiş yeni sınıflar oluşturabilirler.
Struct'lar da nesne tabanlı programlama yapmak için kullanılabilirler, ancak kodun performansını arttırmak için kullanılırlar. Struct'ların yapısı Class'lardan farklıdır ve bellekte stack hafızada tutulurlar. Ayrıca bir instance oluşturulduğunda, bellekte stack hafızada değil heap hafızada bir instance oluşturulur. Bu da Struct'ların daha hızlı ve daha az bellek tüketen bir yapıya sahip olmalarını sağlar. Bu nedenle, küçük ölçekli verileri tutmak ve performansın önemli olduğu durumlarda Struct'lar tercih edilebilir.
Hem Class hem de Struct yapısının örnek kullanımları aşağıdaki gibidir:
public class Ogrenci |
---|
public int No; |
public string Ad; |
public string Soyad; |
public struct Ogrenci |
---|
public int No; |
public string Ad; |
public string Soyad; |
Class'ın Kullanımı
Class'lar, C# dilinde nesne tabanlı programlamanın temelidir. Class'lar, büyük yazılım projelerinde sıkça kullanılırlar ve birçok özelliği barındırırlar. Class'lar, verileri ve kaynakları bir arada tutmak için kullanabileceğiniz en iyi araçlardan biridir. Ayrıca, bir sınıf oluşturarak tasarımınızı gelecekteki birikebilecek değişikliklere karşı koruyabilirsiniz.
Class'ların birçok özelliği vardır ve en önemlisi kapsüllemedir. Kapsülleme, bir sınıf içindeki özellik ve metotlara diğer sınıflardan erişim kontrolü sağlar. Bu sayede, sınıf içindeki özellik ve metotlar istenilen düzeyde gizlenebilir ve sadece belirli düzeyde kullanıcılar tarafından erişilebilir hale getirilebilir. Sadece istenilen özelliklerin ve metotların kullanılması sağlanarak, sınıfın bellek ve işlemci kullanımını da azaltabilirsiniz.
Ayrıca, Class'lar kalıtım yoluyla birbirinden türemiş sınıflar oluşturabilirler. Böylece, ortak özellikler ve metotlar kalıtım alınırken, farklı özellikler ve metotlar da eklenilebilir. Bu sayede, daha verimli ve kullanışlı sınıf yapıları oluşturabilirsiniz.
Kapsülleme
Class kullanımının en önemli özelliklerinden biri kapsülleme özelliğidir. Kapsülleme, sınıf içindeki özellik ve metotlara diğer sınıflardan erişim kontrolü sağlar. Bu sayede özellik ve metotlara çıplak bir şekilde erişim sağlanamaz, sadece belirli koşullar sağlandığında erişim yapılabilir.
Erişim Belirleyicisi | Açıklama |
---|---|
public | Bu belirleyiciye sahip özellik ve metotlar, herhangi bir sınıf veya kod bloğu tarafından erişilebilir. |
private | Bu belirleyiciye sahip özellik ve metotlar, sadece tanımlandıkları sınıf içinde erişilebilirler. |
protected | Bu belirleyiciye sahip özellik ve metotlar, yalnızca tanımlandıkları sınıfın üyeleri veya bu sınıftan türetilen üyeler tarafından erişilebilirler. |
internal | Bu belirleyiciye sahip özellik ve metotlar, aynı assembly içindeki herhangi bir kod tarafından erişilebilir. |
Bu belirleyiciler sayesinde sınıf içindeki özellik ve metotların kullanımı daha güvenli hale getirilir. Örneğin, private belirleyicisine sahip bir özelliğe sadece tanımlandığı sınıf içinden erişim sağlanarak, bu özelliği sınıf dışındaki kodlara karşı gizlenebilir hale getirebilirsiniz.
Kalıtım
Class'lar, kalıtım özelliği sayesinde yeni sınıflar oluşturmak için kullanılabilirler. Oluşturulan yeni sınıflar, önceden tanımlanmış olan diğer sınıfların özelliklerini, metotlarını ve davranışlarını kalıtım yoluyla alabilirler. Bu nedenle, ortak özelliklere sahip olan sınıflar arasında tekrarlanan kodları önlemek için kalıtım kullanılabilir.
Kalıtım, çoğaltılan kodlar yerine, mevcut olan kodların yeniden kullanımını sağlar. Bu nedenle, sınıfları tasarlamak ve yeniden kullanmak daha kolay hale gelir. Kalıtım aynı zamanda, var olan kodların dayanıklılığını ve işlevselliğini artırdığı için programların yazımını hızlandırır ve daha az hata yapılır.
Örneğin, bir hayvan sınıfı oluşturalım. Bu sınıf, ad, yaş ve ağırlık gibi özelliklere sahip olsun. Hayvan sınıfındaki özellikleri kullanarak, bir köpek sınıfı ve bir kedi sınıfı oluşturabiliriz. Bu sınıflar, hayvan sınıfında tanımlanan özelliklerin çoğunu kalıtım yoluyla almış olacaklar. Ancak her sınıfın da kendisine özgü özellikleri olabilir. Örneğin köpek sınıfında, havlama işlevi ekleyebiliriz.
Hayvan | Köpek | Kedi |
---|---|---|
Ad | Ağırlık | Tüy Rengi |
Yaş | Ad | Kulak Tipi |
Ağırlık | Yaş | Ad |
Havlama İşlevi |
Örnek Kullanım
Class'ların kullanımını anlamak için basit bir örnek verebiliriz. Örneğin, bir öğrenci sınıfı oluşturalım:
public class Ogrenci | |
---|---|
{ | |
public int No; | //öğrencinin numarasını tutar |
public string Ad; | //öğrencinin adını tutar |
public string Soyad; | //öğrencinin soyadını tutar |
} |
Bu şekilde tanımlanan öğrenci sınıfı, No, Ad ve Soyad özelliklerini içerir. Bu özellikler, sınıfın içinde diğer metotlarla birlikte kullanılabilir. Örneğin, bir öğrencinin bilgilerini getiren GetOgrenci() metodu yazılabilir:
- public class Ogrenci
- {
- public int No;
- public string Ad;
- public string Soyad;
- public string GetOgrenci()
- {
- return "Öğrencinin adı: " + Ad + " " + Soyad + ", numarası: " + No;
- }
- }
Bu şekilde bir sınıf oluşturarak, öğrenci bilgilerini kolayca saklayabilir ve gerektiğinde çağırabilirsiniz.
Struct'ın Kullanımı
Struct'lar, C# dilinde nesne tabanlı programlama yapmak için kullanılan bir yapıdır. Class'lar gibi özellik ve metotlar içerebilirler, ancak Class'lardan bazı farklılıkları vardır.
Bunlardan ilki, Struct'ların bellekte stack hafızada tutulmasıdır. Ayrıca bir instance oluşturulduğunda da, heap hafızada değil stack hafızada bir instance oluşur. Bu sayede Struct'lar, bellek tüketimi açısından daha az yer kaplarlar ve performansları daha iyidir.
Bir diğer farklılık ise, Struct'ların değer türü olarak tanımlanmasıdır. Yani, bir Struct instance'ı başka bir değişkene atandığında, kopyalanır ve her bir değişken kendi bellek alanında tutulur. Bu durumda, bir Struct instance'ında yapılan bir değişiklik diğer instance'ı etkilemez.
Struct'lar genellikle, küçük boyutlu ve sadece birkaç özellik içeren veri yapıları için kullanılırlar. Örneğin, bir koordinat yapısı veya renk yapısı.
Yapısı
Struct'ların yapısı, Class'lardan farklıdır ve bellekte farklı bir alanda tutulurlar. Bellekte stack hafızada tutuldukları için, heap hafızasında tutulan Class'lardan daha hızlı ve daha az bellek tüketirler. Ayrıca, bir instance oluşturulduğunda, bellekte stack hafızada örnek oluşturulur ve bu sayede daha hızlı erişim sağlanır.
Bir Struct örneği aşağıdaki gibi tanımlanabilir:
public struct Ogrenci { | |
public int No; | // Öğrenci numarası |
public string Ad; | // Öğrenci adı |
public string Soyad; | // Öğrenci soyadı |
} |
Yukarıdaki örnekte görüldüğü gibi, bir Struct içinde birden fazla değişken olabilir ve public veya private olabilirler. Struct'lar da Class'larda olduğu gibi, uygun şekilde kullanıldığında programlamada büyük kolaylık sağlarlar.
Performans
Struct'lar, performans açısından da önemli avantajlar sağlar. Bellekte stack hafızada tutuldukları için, Class'lara göre daha hızlı ve daha az bellek tüketirler. Çünkü stack hafızası, heap hafızasına göre erişimi daha hızlıdır. Struct'lar, Class'lara göre daha basit ve doğrudan bir yapıya sahiptirler. Bu da performanslarını artırır.
Bunun yanı sıra, Struct'ların stack hafızada tutulması sayesinde, Class'lara göre daha düşük bir hafıza tüketimi söz konusudur. Heap hafızasında oluşan aşırı yük, uygulamanın performansını olumsuz etkileyebilir. Struct'ların performans avantajı, özellikle büyük boyutlu veri yapıları için oldukça önemlidir.
Struct kullanımında dikkat edilmesi gereken bazı noktalar da vardır. Örneğin, Struct'ların değer tipi olduğu için, birbiriyle ilişkili Struct'lar üzerinde yapılacak işlemler daha karmaşık hale gelebilir. Ayrıca, Struct'ların kapsama alanı Class'lara göre daha sınırlıdır. Bu sebeple, kullanım alanları ve tercih edilme şekilleri farklılık gösterir.
Örnek Kullanım
Örnek Kullanım:
Yukarıda verilen kod parçası, Ogrenci adında bir struct yapısı oluşturur. Bu yapı, üç özelliğe sahiptir: No, Ad ve Soyad. No özelliği tamsayı tipinde saklanırken, Ad ve Soyad özellikleri string tipindedir.
Bu struct yapısı, bir veri tabanından okunan öğrenci bilgilerini saklamak veya oluşturulacak bir öğrenci kaydı için kullanılabilir. Örnek olarak, hesaplamalı bir program yazılacak olsun ve bu programda öğrencilerin notları ve adları tutulacak olsun. Bu yapıda, her öğrenci için bir instance oluşturulabilir ve notlar ve adlar bu instance'larda saklanabilir.
Öğrenci tipinde bir liste oluşturulurken, bu struct yapısı kullanılabilir. Bu şekilde, öğrenci bilgilerini kolayca saklayabilir ve düzenleyebilirsiniz. Örneğin, bir öğrencinin kaydını oluşturmak için aşağıdaki örnek kodu kullanabilirsiniz:
Ogrenci ogrenci1 = new Ogrenci();ogrenci1.No = 101;ogrenci1.Ad = "Ahmet";ogrenci1.Soyad = "Yılmaz";
Yukarıdaki kodda, Ogreci tipinde "ogrenci1" adında bir instance oluşturuldu. No, Ad ve Soyad özellikleri sırasıyla 101, "Ahmet" ve "Yılmaz" değerleriyle dolduruldu.
Bu yapı, Class yapısına göre daha hızlı ve daha az bellek tüketir. Özellikle, yapıda saklanacak çok sayıda öğrenci bilgisi varsa, Struct yapısı kullanmak daha performanslı bir çözüm olacaktır.