Bagikan melalui


Desain Konstruktor

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.

Ada dua jenis konstruktor: jenis konstruktor dan konstruktor instans.

Konstruktor jenis bersifat statis dan dijalankan oleh CLR sebelum jenisnya digunakan. Konstruktor instans berjalan saat instans jenis dibuat.

Konstruktor jenis tidak dapat mengambil parameter apa pun. Konstruktor instans dapat. Konstruktor instans yang tidak mengambil parameter apa pun sering disebut konstruktor tanpa parameter.

Konstruktor adalah cara paling alami untuk membuat instans dari suatu jenis. Sebagian besar pengembang akan mencari dan mencoba menggunakan konstruktor sebelum mereka mempertimbangkan cara alternatif untuk membuat instans (seperti metode pabrik).

✔️ PERTIMBANGKAN untuk menyediakan konstruktor yang sederhana dan idealnya default.

Konstruktor sederhana memiliki sejumlah kecil parameter, dan semua parameter adalah primitif atau enum. Konstruktor sederhana seperti itu meningkatkan kegunaan kerangka kerja.

✔️ PERTIMBANGKAN untuk menggunakan metode pabrik statis alih-alih konstruktor jika semantik operasi yang diinginkan tidak memetakan langsung ke pembangunan instans baru, atau jika mengikuti pedoman desain konstruktor terasa tidak wajar.

✔️ Gunakan parameter konstruktor sebagai pintasan untuk mengatur properti utama.

Seharusnya tidak ada perbedaan dalam semantik antara menggunakan konstruktor kosong diikuti oleh beberapa set properti dan menggunakan konstruktor dengan beberapa argumen.

✔️ GUNAKAN nama yang sama untuk parameter konstruktor dan properti jika parameter konstruktor digunakan untuk hanya mengatur properti.

Satu-satunya perbedaan antara parameter tersebut dan properti harus casing.

✔️ Lakukan pekerjaan minimal di konstruktor.

Konstruktor seharusnya tidak melakukan banyak pekerjaan selain menangkap parameter konstruktor. Biaya pemrosesan lain harus ditunda sampai diperlukan.

✔️ Lemparkan pengecualian dari konstruktor instans, jika sesuai.

✔️ DO secara eksplisit mendeklarasikan konstruktor tanpa parameter publik dalam kelas, jika konstruktor tersebut diperlukan.

Jika Anda tidak secara eksplisit mendeklarasikan konstruktor apa pun pada suatu jenis, banyak bahasa (seperti C#) akan secara otomatis menambahkan konstruktor tanpa parameter publik. (Kelas abstrak mendapatkan konstruktor yang dilindungi.)

Menambahkan konstruktor parameter ke kelas mencegah kompiler menambahkan konstruktor tanpa parameter. Hal ini sering menyebabkan perubahan yang tidak disengaja.

❌ AVOID secara eksplisit menetapkan konstruktor tanpa parameter pada struktur.

Hal ini membuat pembuatan array lebih cepat, karena jika konstruktor tanpa parameter tidak ditentukan, maka ia tidak harus dijalankan pada setiap slot dalam array. Perhatikan bahwa banyak kompilator, termasuk C#, tidak mengizinkan struct untuk memiliki konstruktor tanpa parameter karena alasan ini.

❌ HINDARI memanggil anggota virtual pada objek di dalam konstruktornya.

Memanggil anggota virtual akan menyebabkan penggantian yang paling diturunkan dipanggil, bahkan jika konstruktor dari jenis yang paling diturunkan belum sepenuhnya dijalankan.

Jenis Pedoman Konstruktor

✔️ Buat konstruktor statis menjadi pribadi.

Konstruktor statis, juga disebut konstruktor kelas, digunakan untuk menginisialisasi jenis. CLR memanggil konstruktor statis sebelum instans pertama dari jenis dibuat atau anggota statis pada jenis yang dipanggil. Pengguna tidak memiliki kendali atas kapan konstruktor statis dipanggil. Jika konstruktor statis tidak bersifat pribadi, itu dapat dipanggil dengan kode selain CLR. Tergantung pada operasi yang dilakukan di konstruktor, ini dapat menyebabkan perilaku yang tidak terduga. Kompiler C# memaksa konstruktor statis untuk menjadi pribadi.

❌ JANGAN melepas pengecualian dari konstruktor statis.

Jika pengecualian dilepaskan dari konstruktor jenis, jenisnya tidak dapat digunakan dalam domain aplikasi saat ini.

✔️ PERTIMBANGKAN untuk menginisialisasi bidang statis sebaris daripada secara eksplisit menggunakan konstruktor statis, karena runtime dapat mengoptimalkan performa jenis yang tidak memiliki konstruktor statis yang ditentukan secara eksplisit.

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