Bagikan melalui


Memilih Antara Kelas dan Struktur

Catatan

Konten ini dicetak ulang oleh izin Pearson Education, Inc. dari Panduan Desain Kerangka Kerja: Konvensi, Idiom, dan Pola untuk Pustaka .NET yang Dapat Digunakan Kembali, Edisi ke-2. Edisi itu diterbitkan pada tahun 2008, dan buku tersebut telah sepenuhnya direvisi pada edisi ketiga. Beberapa informasi di halaman ini mungkin sudah kedaluarsa.

Salah satu keputusan desain dasar yang dihadapi setiap perancang kerangka kerja adalah apakah akan merancang jenis sebagai kelas (jenis referensi) atau sebagai struktur (jenis nilai). Pemahaman yang baik tentang perbedaan perilaku jenis referensi dan jenis nilai sangat penting dalam membuat pilihan ini.

Perbedaan pertama antara tipe referensi dan tipe nilai yang akan kita pertimbangkan adalah bahwa tipe referensi dialokasikan pada tumpukan dan pengumpulan sampah, sedangkan tipe nilai dialokasikan baik pada tumpukan atau sebaris dalam tipe penampung dan tidak dialokasikan saat tumpukan dibuka atau saat ketika jenis penampungnya dibatalkan alokasinya. Oleh karena itu, alokasi dan dealokasi jenis nilai secara umum lebih murah daripada alokasi dan dealokasi jenis referensi.

Selanjutnya, array jenis referensi dialokasikan secara out-of-line, yang berarti elemen array hanyalah referensi ke instans jenis referensi yang berada di tumpukan. Array jenis nilai dialokasikan sebaris, yang berarti bahwa elemen array adalah instans aktual dari jenis nilai. Oleh karena itu, alokasi dan dealokasi jenis nilai secara umum lebih murah daripada alokasi dan dealokasi jenis referensi. Selain itu, dalam sebagian besar kasus, array jenis nilai menunjukkan lokalitas referensi yang jauh lebih baik.

Perbedaan berikutnya terkait dengan penggunaan memori. Jenis nilai dikotakkan saat ditransmisikan ke jenis referensi atau salah satu antarmuka yang mereka terapkan. Pengkotakan akan dibuka saat ditransmisikan kembali ke jenis nilai. Karena kotak adalah objek yang dialokasikan pada tumpukan dan pengumpulan sampah, terlalu banyak pengkotakan dan pembukaan kotak dapat berdampak negatif pada tumpukan, pengumpul sampah, dan pada akhirnya performa aplikasi. Sebaliknya, tidak ada pengkotakan seperti itu yang terjadi karena jenis referensi ditransmisikan. (Untuk informasi selengkapnya, lihat Pengkotakan dan Pembukaan Kotak).

Selanjutnya, penugasan jenis referensi menyalin referensi, sedangkan penugasan jenis nilai menyalin seluruh nilai. Oleh karena itu, penugasan jenis referensi besar lebih murah daripada penugasan jenis nilai besar.

Terakhir, jenis referensi diteruskan oleh referensi, sedangkan jenis nilai diteruskan oleh nilai. Perubahan pada instans jenis referensi memengaruhi semua referensi yang menunjuk ke instans. Instans jenis nilai disalin saat diteruskan oleh nilai. Ketika instans jenis nilai diubah, tentu saja tidak memengaruhi salinannya. Karena salinan tidak dibuat secara eksplisit oleh pengguna tetapi secara implisit dibuat ketika argumen diteruskan atau nilai pengembalian dikembalikan, jenis nilai yang dapat diubah dapat membingungkan banyak pengguna. Oleh karena itu, jenis nilai harus tidak dapat diubah.

Sebagai aturan praktis, sebagian besar jenis dalam kerangka kerja harus kelas. Namun, ada beberapa situasi di mana karakteristik jenis nilai membuatnya lebih tepat untuk menggunakan struktur.

✔️ PERTIMBANGKAN mendefinisikan struktur alih-alih kelas jika instans jenisnya kecil dan umumnya berumur pendek atau biasanya disematkan di objek lain.

❌ HINDARI menentukan struktur kecuali jenisnya memiliki semua karakteristik berikut:

  • Jenisnya secara logis mewakili satu nilai, mirip dengan jenis primitif (int, double, dll.).

  • Jenisnya memiliki ukuran instans di bawah 16 byte.

  • Jenisnya tidak dapat diubah.

  • Jenisnya tidak harus sering dikotakkan.

Dalam semua kasus lain, Anda harus menentukan jenis Anda sebagai kelas.

Portions © 2005, 2009 Microsoft Corporation. Semua hak dilindungi undang-undang.

Dicetak ulang dengan izin dari Pearson Education, Inc. dari Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition oleh Krzysztof Cwalina dan Brad Abrams, diterbitkan 22 Okt 2008 oleh Addison-Wesley Professional sebagai bagian dari Seri Pengembangan Microsoft Windows.

Lihat juga