Sınıf ile Yapısalcı arasındaki farkı anlamadan önce onlarla ilişkili birkaç temel kavramı bilmeliyiz. Kavramları anlamaksızın ikisi arasındaki farkları kavramak zor.
Nesne ve Nesne Nedir:
Nesneye Dayalı Programlama ile ilgili iki önemli kavram budur ve işlevleri çerçevelemek ve diğer işlevlere geçirilen verilerin temelini oluşturmaktadır. Daha iyi bir anlayış için onu gerçek hayatta bir örnekle ilişkilendirebiliriz. Bir Sınıf bir mağaza olarak kabul edilebilir ve bir Nesne bakkal, kırtasiye, meyve gibi bireysel, özel mağazalardan herhangi biri olabilir. Tüm nesneler ana sınıfın - deponun ortak özelliklerini paylaşır - nesneler, belirli bir tasarım, ışıklandırma, vb. gibi kendi münhasır özelliklerine sahip olabilir. Nesneler aracılığıyla aslında sınıfı kullanabiliriz; bir sınıf örneğini oluşturuyorlar.
Sınıf
Sözdizimi Deposu {
public string things;
kamusal ip dizaynı;
}
Nesnenin Sözdizimi
Mağazayı market = new Store ();
Mağaza Kırtasiyesi = yeni Mağaza ();
Yapı nedir?
A Struct yalnızca verileri içerir ve bu nedenle Struct nesneleri aracılığıyla bireysel veri gereksinimlerinin çerçevelendirilmesinde yardımcı olur. Bir sınıfın aksine, fonksiyonları yoktur. Sözdizimi şöyledir:
struct grocery_entrance {
char giriş_anı [50];
int giriş_size;
} bakkaliye giriş;
Tüm mağazalar, yapı adını ve boyutlarını içeren Struct girişini kullanabilir.
Miras Nedir?
Bir oğlanın babasının mülklerini nasıl miras aldığına benzer ve oğlu kendi de başka mülklerini de ekleyebilir. Sınıf, temel sınıf veya türetilmiş bir sınıfa ayrılabilir; bunlardan birincisi, son sınıfın oluşturulması için taban olarak alınabilir. Türetilmiş sınıf, taban sınıfından aldığı şey dışında kendisi için birkaç özellik daha ekler. Yukarıdaki örneği incelediğimizde, bakkal, yine de XYZ bakkal gibi belirli bir bakkaldan türetilebilir.
Şimdi temel kavramları bildiğimizden, Class ile Struct arasındaki asıl farka gidebiliriz.
Farkları Nasıldır?
- Yeniden kullanılabilirlik: Sınıflar temel çerçeveyi oluştururken yeniden kullanılabilirler; Bununla birlikte, yapılar belirli özelliklere sahip tek tek unsurlardır, bu yüzden yeniden kullanılamazlar. Örneğin, bakkal Sınıfı, her türde bakkal için kullanılabilir, ancak Struct bakkalı yeri yalnızca bunun için spesifiktir ve başka sınıflarda yeniden kullanılması anlamsızdır.
- Görünürlük: Bir Sınıfdaki tüm işlevler, Nesneleri tarafından herkes tarafından kullanılabilir.Örneğin, 'mağaza' sınıfının altında 'şeyler' adlı bir işleve sahibiz. 'Şeyler' işlevi, 'bakkal,' kırtasiye mağazası 'gibi tüm Nesneleri tarafından görülebilir. Yapıların verileri kendisiyle sınırlı olduğundan ve diğer Yapılara görünür olmadığından, bu tür görünürlük Struct'larla mümkün değildir. Her şeyi açıklığa kavuşturmak için, 'market' girişinin verisinin diğer mağazalardan genel olarak görünmediğini söyleyebiliriz.
- Referansla Geçiş ve Değere Göre Geçiş: Referansla Geçiş fonksiyonlara sadece gerçek yeri değil bellek yerine gönderilmesini sağlamaktır. Bu, değer ne zaman değişirse, değişim ilgili işlevlere yansıtılır. Değeri geçmek, sırayla, değeri işleve gönderiyor demektir. Bu durumda, gönderildikten sonra değer değişikliği fonksiyona yansıtılmayacaktır. Sınıf, referans olarak geçişi kullanır ve Struct, geçiş değeri kullanır.
- Miras: Sınıflar alt sınıflar oluşturmak için daha da miras alınabilir, ancak Yapılar kalıtımdan yararlanamazlar. Örneğin, Sınıf Mağazası işlevlerini alt sınıf 'bakkal' olarak sunar. Ancak Struct 'bakkalınağı' hiçbir işlevi devralamaz. Burada, alt yapı gibi bir kavram bulunmadığını söyleyebiliriz.
- Varsayılan görünürlük: Bir Sınıfın üyeleri varsayılan olarak özel varlıklar halinde tutulurken, bir Yapı üyeleri varsayılan olarak kamu varlıkları olarak tutulur.
- Boş bir Sınıf ve Yapı: Sınıfının boyutu, boş olsa bile 1 Byte boyutunu kullanır; ancak Struct, boşken hiçbir zaman bellek kullanmaz. Bu, boş bir yapının boyutunun 0 Bayt'a eşit olduğunu söyleyebiliriz demektir.
- Çöp toplama: Çöp toplama işlemi, geçişi referans olarak kullandıkları için Sınıflar ile mümkündür. Bu nedenle, temizlemenin verilerin depolandığı bir yerde yapılması daha kolaydır. Öte yandan, Struct ile çöp toplama mümkün değildir, çünkü değer geçişi kullanır ve veriler farklı yerlere dağılmıştır.
- Bellek yönetimi: Sınıf, çöp toplamalarına izin verdiğinden, bellek yönetimi de etkilidir; Bununla birlikte, Structlar ile etkili değildir.
- Yapıcı: Bir kurucu genellikle sınıfı belirli belirli değerlerle başlatır. Değerlerle başlatılan bir şey gibi görünebiliriz. Yeni bir sınıf oluşturulması gerekiyorsa, bu örnek için bellek ayırmak için yapıcı çağırılır. Yapıcı çağırırken değerler argüman olarak da iletilebilir. Şimdi gerçek tartışmamıza gelelim. Sınıflar, argümanlar olsun ya da olmasın her tür yapıcıya izin verirken, yapılar yalnızca argümanları olan yapıcılara izin verir; e. parametre oluşturucular.
- Destructor: Bir sınıfın bir örneğini silmek istediğimizde bir yıkıcı çağırılır. Yıkıcı, sırayla bu örneği siler ve belleği boşa çıkarır. Bir Sınıf bir yıkıcı kullanabilirken, bir Yapıçı bunu yapamaz.
- Üye Değişkenleri Başlatma: Sınıflarda, üye değişkenleri doğrudan başlatabiliriz; Struct'larla böyle bir başlatma mümkün değildir.
- Nesne Oluşturma: Sınıflarda nesne oluşturma için genel sözdizimi şöyledir:
Demo obj = new Demo ();
Bu, bir sınıfın nesneleri oluşturulurken 'yeni' anahtar kelimesini kullanmamız gerektiği anlamına gelir.Struct nesneleri oluşturulurken bu gerekli değildir. Sadece sözdizimine göz atın:
Demo obj;
'Yeni' anahtar kelimesi olmadan bile mükemmel çalışıyor.
Yapı ve Sınıf Ne Zaman Kullanılmalı?
Sınıflar veriyi ve işlevleri birlikte kullanmada daha esnek olduğundan, kullanılan nesneler karmaşık ve büyük olduğunda bunu kullanabiliriz. Örneğimizde bir Alışveriş Merkezi sistemi "mağazayı" kullanarak sistemi daha iyi ifade edebilir. Bununla birlikte, yapılar Sınıflardan daha az etkili olduğu için küçük nesnelerle sınırlıdır. Dolayısıyla, kendi mağazanızı tasarlarsanız, Yapılar daha iyi bir seçimdir.
Bir Yapıyı Bir Sınıfa Ve İkizine Dönüştürmek İçin Nasıl Yapılır?
Bir Struct'u bir Class'a veya bir Class'a çevirmek için 'boxing' ve 'unboxing' terimlerini duymuş olabilirsiniz. Bunlar dönüşüm sürecinde bize yardımcı olacak etkili süreçler olmasına rağmen, dikkatle ele alınmalıdır. Bu, bellek konumlarını doğrudan etkilerken, sistemimizin performansı üzerinde büyük bir etkisi vardır. Dahası, çöp toplama süreçlerini etkiler ve genel sistem verimsizliği ile sonuçlanır. Bu nedenle, bu dönüşümleri yalnızca gerektiğinde kullanın.
Yukarıdaki tablolardaki farklılıklara bir göz atalım.