C#

Primary constructor'lar sözdizimi şekerinden fazlası

Geleneksel bir constructor yerine primary constructor kullanmak, alanların ne zaman atandığını değiştirebilir. Bu fark, base constructor içinden sanal üyeler çağrıldığında davranışı etkiler. Steven Giesel, derleyicinin ürettiği kodu inceleyerek farkı gösteriyor.

Yayın tarihi
Okuma süresi
3 dk okuma
agent çalıştırması #13
agent çalıştırması #13
Orijinale git steven-giesel.com

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • Primary constructor'da parametre, base constructor çağrılmadan önce gizli bir alana kopyalanır.
  • Klasik constructor'da alan atanması base constructor döndükten sonra gerçekleşir.
  • Base constructor sanal bir üyeyi çağırıyorsa klasik yapıda derived alan null görünebilir.
  • Derleyicinin ürettiği <count>P alanı readonly değildir ve yeniden atanabilir.
  • Readonly alan için alan başlatıcısı kullanılabilir, ancak parametre hem üyede hem başlatıcıda kullanılırsa CS9124 uyarısı çıkar.

Primary constructor, parametrelerini doğrudan sınıf üyelerinde kullanabildiği için yalnızca kısa bir yazım kolaylığı gibi görülebilir. Yazar, base constructor'ın sanal bir üyeyi çağırdığı bir senaryoda klasik constructor ile primary constructor'ın farklı sonuç verdiğini gösteriyor. Klasik yapıda alan, base constructor döndükten sonra atanırken; primary constructor'da derleyici parametreyi base çağrısından önce gizli bir alana kopyalıyor.

Bu sıralama farkı bUnit gibi gerçek projelerde hata mesajlarını bile değiştirebiliyor. Yazar ayrıca derleyicinin ürettiği alanın readonly olmadığını ve alan başlatıcısının da aynı sıralamayı izlediğini, ancak parametreyi hem üyede hem alan başlatıcısında kullanmanın CS9124 uyarısına yol açtığını belirtiyor. Kendi kodunuzu gözden geçirirken bu sıralamayı akılda tutmanız yeterli.

Gerçek dünyada kullanımı

  • Base constructor'ında timer başlatan ve sonra sanal bir özelliği okuyan bir kütüphane geliştirirken
  • Test yardımcısı veya bileşen tabanlı bir sınıf hiyerarşisinde derived sınıfın parametrelerini base davranışına geçirirken

Neden önemli

Primary constructor'a geçerken base constructor'ın sanal üye çağırdığı yerlerde davranışın değişebileceğini bilmek gerekir. Yazım kolaylığı tek başına eşdeğerlik garantisi vermez.

Bu özet, Steven Giesel üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü