Garip bir alışkanlığım var ... en azından iş arkadaşımın bilgisine göre. Birlikte küçük bir proje üzerinde çalışıyoruz. Sınıfları yazma şeklim (basitleştirilmiş örnek):
[Serializable()]
public class Foo
{
public Foo()
{ }
private Bar _bar;
public Bar Bar
{
get
{
if (_bar == null)
_bar = new Bar();
return _bar;
}
set { _bar = value; }
}
}
Yani, temelde, herhangi bir alanı yalnızca bir alıcı çağrıldığında ve alan hala boş olduğunda başlattım. Bunun, hiçbir yerde kullanılmayan özellikleri başlatmadan aşırı yüklenmeyi azaltacağını düşündüm.
ETA: Bunu yapmamın nedeni, sınıfımın başka bir sınıfın örneğini döndüren birkaç özelliğe sahip olması ve bunun da daha fazla sınıf içeren özelliklere sahip olmasıdır. Üst sınıf için yapıcı çağrıldığında, her zaman gerekli olmadığında, tüm bu sınıflar için tüm yapıcılar çağrılır.
Bu uygulamaya karşı kişisel tercih dışında herhangi bir itiraz var mı?
GÜNCELLEME: Bu soru ile ilgili birçok farklı görüşü dikkate aldım ve kabul edilen cevabımın yanında olacağım. Ancak, şimdi kavramı daha iyi anladım ve ne zaman kullanacağım ve ne zaman kullanacağım konusunda karar verebiliyorum.
Eksileri:
- İş parçacığı güvenlik sorunları
- Geçirilen değer null olduğunda "ayarlayıcı" isteğine uymamak
- Mikro optimizasyonlar
- İstisna yönetimi bir kurucuda yapılmalıdır
- Sınıf kodunda null olup olmadığını kontrol etmeniz gerekiyor
Artıları:
- Mikro optimizasyonlar
- Özellikler hiçbir zaman sıfır döndürmez
- "Ağır" nesneleri geciktirme veya yüklemekten kaçınma
Eksilerini çoğu benim mevcut kitaplık için geçerli değildir, ancak "mikro-optimizasyon" aslında bir şey hiç optimize olup olmadığını görmek için test etmek gerekir.
SON GÜNCELLEME:
Tamam, cevabımı değiştirdim. Orijinal sorum bunun iyi bir alışkanlık olup olmadığıydı. Ve şimdi bunun olmadığına ikna oldum. Belki hala geçerli kodumun bazı bölümlerinde kullanacağım, ancak koşulsuz ve kesinlikle her zaman değil. Bu yüzden alışkanlığımı kaybedeceğim ve kullanmadan önce düşüneceğim. Herkese teşekkürler!