C# üye değişken başlatma; en iyi yöntem?
Beyanname üzerinde başlatmak sınıf üyesi değişkenleri için daha iyi olur
private List<Thing> _things = new List<Thing>();
private int _arb = 99;
veya varsayılan kurucu?
private List<Thing> _things;
private int _arb;
public TheClass()
{
_things = new List<Thing>();
_arb = 99;
}
Sadece tarz meselesi mi yoksa performans için bir denge, öyle ya da böyle var mı?
CEVAP
Performans açısından, gerçek bir fark yoktur; alan başlatıcılar yapıcı mantık olarak uygulanır. Tek fark alan başlatıcılar herhangi bir ""bu" yapıcı."/base daha önce de oldu bu.
Yapıcı yaklaşım otomatik uygulanan özellikler (alan başlatıcılar olamaz)-yani kullanılabilir
[DefaultValue("")]
public string Foo {get;set;}
public Bar() { // ctor
Foo = "";
}
Bunun dışında, alan başlatıcı sözdizimi tercih ederim; şeyler yerelleştirilmiş tutar buluyorum yani
private readonly List<SomeClass> items = new List<SomeClass>();
public List<SomeClass> Items {get {return items;}}
Avcılık yukarı ve aşağı atanmış nerede olduğunu bulmak için gitmek zorunda değilsiniz...
Açık istisna karmaşık mantık yerine ya da bu durumda yapıcı tabanlı başlatma gitmek yoludur yapıcı parametreleri ile başa çıkmak için gereken yere. Eğer birden fazla kurucular varsa, benzer şekilde, alanlardan her zaman az gibi olabilir yani aynı şekilde set almak için tercih olacaktır:
public Bar() : this("") {}
public Bar(string foo) {Foo = foo;}
edit: bir yan yorum, unutmayın yukarıda, varsa diğer alanlar (gösterilmez) ile alan başlatıcılar, o zaman onlar sadece doğrudan başlatılmış kurucular bu Ara base(...)
- yani public Bar(string foo)
decimal. Diğer kurucu yokdeğilthis(...)
decimal tarafından yapılır bunu bildiği için başlatıcılar alan.
Yerel bir statik değişken evresel C 11...
Java'da değişken bağımsız değişken bir...
Java: birden çok değişken döngü başlat...
Neden't nitelikli static final de...
Olamaz bir iç sınıf içinde nihai olmay...