Saya punya kebiasaan aneh, sepertinya ... setidaknya menurut rekan kerja saya. Kami telah mengerjakan proyek kecil bersama. Cara saya menulis kelas adalah (contoh sederhana):
[Serializable()]
public class Foo
{
public Foo()
{ }
private Bar _bar;
public Bar Bar
{
get
{
if (_bar == null)
_bar = new Bar();
return _bar;
}
set { _bar = value; }
}
}
Jadi, pada dasarnya, saya hanya menginisialisasi bidang apa pun ketika pengambil dipanggil dan bidang tersebut masih nol. Saya pikir ini akan mengurangi kelebihan dengan tidak menginisialisasi properti yang tidak digunakan di mana pun.
ETA: Alasan saya melakukan ini adalah karena kelas saya memiliki beberapa properti yang mengembalikan instance dari kelas lain, yang pada gilirannya juga memiliki properti dengan kelas yang lebih banyak, dan seterusnya. Memanggil konstruktor untuk kelas atas selanjutnya akan memanggil semua konstruktor untuk semua kelas ini, ketika mereka tidak selalu semua dibutuhkan.
Apakah ada keberatan terhadap praktik ini, selain dari preferensi pribadi?
UPDATE: Saya telah mempertimbangkan banyak pendapat yang berbeda sehubungan dengan pertanyaan ini dan saya akan berdiri dengan jawaban yang diterima Namun, saya sekarang memiliki pemahaman yang jauh lebih baik tentang konsep dan saya dapat memutuskan kapan akan menggunakannya dan kapan tidak.
Cons:
- Masalah keamanan utas
- Tidak mematuhi permintaan "setter" ketika nilai yang diberikan adalah nol
- Optimalisasi mikro
- Penanganan pengecualian harus dilakukan di konstruktor
- Perlu memeriksa null dalam kode kelas
Pro:
- Optimalisasi mikro
- Properti tidak pernah mengembalikan nol
- Tunda atau hindari memuat benda "berat"
Sebagian besar kontra tidak berlaku untuk perpustakaan saya saat ini, namun saya harus menguji untuk melihat apakah "optimasi mikro" benar-benar mengoptimalkan apa pun.
PEMBAHARUAN TERAKHIR:
Oke, saya mengubah jawaban saya. Pertanyaan awal saya adalah apakah ini kebiasaan yang baik atau tidak. Dan sekarang saya yakin tidak. Mungkin saya masih akan menggunakannya di beberapa bagian kode saya saat ini, tetapi tidak tanpa syarat dan pasti tidak setiap saat. Jadi saya akan kehilangan kebiasaan dan memikirkannya sebelum menggunakannya. Terimakasih semuanya!