Sınıf ile Yapı Arasında Seçim Yapma

Not

Bu içerik, Çerçeve Tasarım Yönergeleri: Kurallar, Deyimler ve Yeniden Kullanılabilir .NET Kitaplıkları için Desenler, 2. Sürüm'den Pearson Education, Inc.'in izniyle yeniden yazdırılır. Bu baskı 2008'de yayımlandı ve kitap o zamandan beri üçüncü baskıda tamamen revize edilmiştir. Bu sayfadaki bazı bilgiler güncel olmayabilir.

Her çerçeve tasarımcısının karşılaştığı temel tasarım kararlarından biri, bir türü sınıf (başvuru türü) veya yapı (değer türü) olarak tasarlamaktır. Başvuru türlerinin ve değer türlerinin davranışındaki farklılıkların iyi anlaşılması, bu seçimin yapılmasında çok önemlidir.

Başvuru türleriyle değer türleri arasındaki ilk fark, başvuru türlerinin yığında ayrılması ve atık toplaması, değer türlerinin ise yığında veya türleri içeren satır içinde ayrılması ve yığın gevşediğinde veya içerdikleri tür serbest bırakıldığında serbest bırakılmasıdır. Bu nedenle, değer türlerinin ayırmaları ve serbest bırakmaları, genel olarak başvuru türlerinin ayırmalarından ve serbest bırakmalarından daha ucuzdur.

Daha sonra, başvuru türü dizileri satır dışı ayrılır, yani dizi öğeleri yalnızca yığında bulunan başvuru türünün örneklerine başvurudur. Değer türü dizileri satır içinde ayrılır, yani dizi öğeleri değer türünün gerçek örnekleridir. Bu nedenle, değer türü dizilerinin ayırmaları ve serbest bırakmaları, başvuru türü dizilerinin ayırmalarından ve serbest bırakmalarından çok daha ucuzdur. Buna ek olarak, çoğu durumda değer türü dizileri başvurunun çok daha iyi bir yerelliğini sergiler.

Bir sonraki fark bellek kullanımıyla ilgilidir. Değer türleri, bir başvuru türüne veya uyguladıkları arabirimlerden birine yayınlandığında kutulanır. Değer türüne geri döndürildiğinde kutular kaldırılır. Kutular yığında ayrılan ve atık toplanmış nesneler olduğundan, çok fazla kutulama ve kutu açmanın yığın, çöp toplayıcı ve sonuçta uygulamanın performansı üzerinde olumsuz bir etkisi olabilir. Buna karşılık, başvuru türleri yayınlandığından böyle bir kutulama gerçekleşmez. (Daha fazla bilgi için bkz. Kutulama ve Kutu açma).

Ardından, başvuru türü atamaları başvuruyu kopyalarken, değer türü atamaları değerin tamamını kopyalar. Bu nedenle, büyük başvuru türlerinin atamaları, büyük değer türlerinin atamalarından daha ucuz olur.

Son olarak, başvuru türleri başvuruya göre geçirilirken, değer türleri değere göre geçirilir. Bir başvuru türünün örneğinde yapılan değişiklikler, örneğe işaret eden tüm başvuruları etkiler. Değer türü örnekleri, değere göre geçirildiğinde kopyalanır. Bir değer türünün örneği değiştirildiğinde, elbette kopyalarının hiçbirini etkilemez. Kopyalar kullanıcı tarafından açıkça oluşturulmadığından ancak bağımsız değişkenler geçirildiğinde veya döndürülen değerler döndürildiğinde örtük olarak oluşturulduğundan, değiştirilebilen değer türleri birçok kullanıcı için kafa karıştırıcı olabilir. Bu nedenle, değer türleri sabit olmalıdır.

Genel bir kural olarak, bir çerçevedeki türlerin çoğunluğu sınıf olmalıdır. Ancak, bir değer türünün özelliklerinin yapıların kullanılmasını daha uygun hale getirmesi gibi bazı durumlar vardır.

✔️ Türün örnekleri küçük ve genellikle kısa ömürlüyse veya genellikle diğer nesnelere eklenmişse sınıf yerine bir yapı tanımlamayı göz önünde bulundurun.

❌ Türün aşağıdaki özelliklerin tümüne sahip olmadığı sürece bir yapı tanımlamaktan KAÇıNıN:

  • Mantıksal olarak ilkel türlere (int, doublevb.) benzer şekilde tek bir değeri temsil eder.

  • 16 bayt'ın altında bir örnek boyutuna sahiptir.

  • Bu sabit.

  • Sık sık kutulanması gerekmez.

Diğer tüm durumlarda, türlerinizi sınıf olarak tanımlamanız gerekir.

Porsiyonlar © 2005, 2009 Microsoft Corporation. Tüm hakları saklıdır.

Pearson Education, Inc. in Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraryes, 2nd Edition by Krzysztof Cwalina and Brad Abrams izniyle yeniden yazdırıldı ve 22 Ekim 2008'de Addison-Wesley Professional tarafından Microsoft Windows Geliştirme Serisi'nin bir parçası olarak yayımlandı.

Ayrıca bkz.