Null tanılama uyarılarını geliştirmek için bir kod tabanını null atanabilir başvuru türleriyle güncelleştirme
Boş değer atanabilir başvuru türleri , başvuru türü değişkenlerine değer atanması veya atanmaması null
gerektiğini bildirmenizi sağlar. Derleyicinin statik çözümlemesi ve kodunuzun başvuruyu kaldırabileceği null
uyarılar bu özelliğin en önemli avantajıdır. Etkinleştirildikten sonra derleyici, kodunuz çalıştırıldığında bir System.NullReferenceException oluşturulmasını önlemenize yardımcı olacak uyarılar oluşturur.
Kod tabanınız görece küçükse, projenizdeki özelliği açabilir, uyarıları ele alabilir ve geliştirilmiş tanılamanın avantajlarından yararlanabilirsiniz. Daha büyük kod temelleri, zaman içindeki uyarıları ele almak için daha yapılandırılmış bir yaklaşım gerektirebilir ve siz farklı türlerdeki veya dosyalardaki uyarıları ele alırken bazılarında bu özelliği etkinleştirebilirsiniz. Bu makalede, bir kod tabanını güncelleştirmeye yönelik farklı stratejiler ve bu stratejilerle ilişkili dengeler açıklanmaktadır. Geçişinize başlamadan önce null atanabilir başvuru türlerinin kavramsal genel bakışını okuyun. Derleyicinin statik çözümlemesini, null-durum değerlerini belki-null ve not-null değerlerini ve null atanabilir ek açıklamaları kapsar. Bu kavramlar ve terimler hakkında bilgi edindikten sonra kodunuzu geçirmeye hazırsınız demektir.
Geçişinizi planlayın
Kod tabanınızı nasıl güncelleştirdiğinizden bağımsız olarak amaç, projenizde null atanabilir uyarıların ve null atanabilir ek açıklamaların etkinleştirilmesidir. Bu hedefe ulaştığınızda, bu ayar projenizde olur <nullable>Enable</nullable>
. Ayarları başka bir yerde ayarlamak için ön işlemci yönergelerine ihtiyacınız olmayacaktır.
Not
Etiket kullanarak projeniz için bir Nullable
<Nullable>
ayar belirleyebilirsiniz. Daha fazla bilgi için Derleyici seçenekleri'ne bakın.
İlk seçenek, proje için varsayılanı ayarlamaktır. Seçenekleriniz şunlardır:
- Varsayılan olarak null atanabilir devre dışı bırak: proje dosyanıza öğe
Nullable
eklemezseniz devre dışı bırakma varsayılandır. Kod tabanına etkin olarak yeni dosyalar eklemediğinizde bu varsayılanı kullanın. Ana etkinlik, kitaplığı null atanabilir başvuru türlerini kullanacak şekilde güncelleştirmektir. Bu varsayılanı kullanmak, kodunu güncelleştirirken her dosyaya null atanabilir bir önişlemci yönergesi eklediğiniz anlamına gelir. - Varsayılan olarak null atanabilir etkinleştir: Yeni özellikleri etkin bir şekilde geliştirirken bu varsayılanı ayarlayın. Tüm yeni kodun null atanabilir başvuru türlerinden ve null atanabilir statik analizden yararlanmasını istiyorsunuz. Bu varsayılanı kullanmak, her dosyanın en üstüne bir
#nullable disable
eklemeniz gerektiği anlamına gelir. Her dosyadaki uyarıları ele alırken bu önişlemci yönergelerini kaldıracaksınız. - Varsayılan olarak null atanabilir uyarılar: İki aşamalı geçiş için bu varsayılanı seçin. İlk aşamada, uyarıları ele alın. İkinci aşamada, bir değişkenin beklenen null durumunu bildirmek için ek açıklamaları açın. Bu varsayılanı kullanmak, her dosyanın en üstüne bir
#nullable disable
eklemeniz gerektiği anlamına gelir. - Varsayılan olarak null atanabilir ek açıklamalar . Uyarıları ele almadan önce koda ek açıklama ekleyin.
Varsayılan olarak null atanabilir etkinleştirildiğinde, ön işlemci yönergelerini her dosyaya eklemek için daha fazla ön iş oluşturulur. Bunun avantajı, projeye eklenen her yeni kod dosyasının null atanabilir olarak etkinleştirilmesidir. Tüm yeni çalışmalar null değere duyarlı olacaktır; yalnızca mevcut kodun güncelleştirilmiş olması gerekir. Kitaplığın kararlı olması ve geliştirmenin ana odak noktası null atanabilir başvuru türlerini benimsemekse, varsayılan değer atanabilir değerini devre dışı bırakmak daha iyi çalışır. API'lere açıklama eklerken null atanabilir başvuru türlerini açarsınız. İşiniz bittiğinde, projenin tamamı için null atanabilir başvuru türlerini etkinleştirirsiniz. Yeni bir dosya oluşturduğunuzda, önişlemci yönergelerini eklemeniz ve boş değer atanabilir duruma getirmeniz gerekir. Takımınızdaki herhangi bir geliştirici unutursa, bu yeni kod artık tüm kodları null atanabilir hale getirmek için iş kapsamına eklenir.
Bu stratejilerden hangisini seçeceğiniz, projenizde ne kadar etkin geliştirmenin gerçekleştiğine bağlıdır. Projeniz ne kadar olgun ve kararlı olursa ikinci strateji o kadar iyi olur. Ne kadar çok özellik geliştirilirse, ilk strateji o kadar iyi olur.
Önemli
Genel null atanabilir bağlam, oluşturulan kod dosyaları için geçerli değildir. Her iki stratejide de, oluşturulan olarak işaretlenmiş tüm kaynak dosyalarda null atanabilir bağlam devre dışı bırakılır . Bu, oluşturulan dosyalardaki API'lere açıklama eklenmediği anlamına gelir. Bir dosyanın oluşturuldu olarak işaretlenmesinin dört yolu vardır:
- .editorconfig içinde, bu dosyaya uygulanan bir bölümde belirtin
generated_code = true
. - Dosyanın en üstüne bir açıklama ekleyin
<auto-generated>
veya<auto-generated/>
ekleyin. Bu açıklamadaki herhangi bir satırda olabilir, ancak açıklama bloğu dosyadaki ilk öğe olmalıdır. - Dosya adını TemporaryGeneratedFile_ ile başlatma
- Dosya adını .designer.cs, .generated.cs, .g.cs veya .g.i.cs ile sonlandırın.
Oluşturucular ön işlemci yönergesini #nullable
kullanarak kabul edebilir.
Bağlamları ve uyarıları anlama
Uyarıların ve ek açıklamaların etkinleştirilmesi, derleyicinin başvuru türlerini ve null atanabilirliği nasıl görüntüleyebilmesini denetler. Her tür üç null değişkenden birine sahiptir:
- oblivious: Ek açıklama bağlamı devre dışı bırakıldığında tüm başvuru türleri boş değer atanabilir.
- nonnullable: Ek açıklama bağlamı etkinleştirildiğinde ek açıklamasız başvuru türü
C
geçersizdir. - nullable: Ek açıklamalı başvuru türü,
C?
null atanabilir, ancak ek açıklama bağlamı devre dışı bırakıldığında bir uyarı verilebilir. ek açıklama bağlamı etkinleştirildiğinde ilevar
bildirilen değişkenler null atanabilir .
Derleyici, bu null atanabilirliği temel alan uyarılar oluşturur:
- kaldırılamayan türler, olası
null
bir değer atanmışsa uyarılara neden olur. - null atanabilir türler, belki-null olduğunda başvurulmadığında uyarılara neden olur.
- Belki null olduğunda ve uyarı bağlamı etkinleştirildiğinde başvurulmayan türler uyarılara neden olur.
Her değişkenin null atanabilirliğine bağlı olarak varsayılan null atanabilir durumu vardır:
- Null atanabilir değişkenlerin varsayılan null-durumu belki-null olur.
- Null değer atanamayan değişkenlerin varsayılan null-durumu null değil'tir.
- Null atanabilir belirsiz değişkenler varsayılan null olmayan null durumuna sahiptir.
Boş değer atanabilir başvuru türlerini etkinleştirmeden önce, kod tabanınızdaki tüm bildirimler null atanabilir ve unutulabilir. Bu, tüm başvuru türlerinin varsayılan null olmayan null durumuna sahip olduğu anlamına geldiği için önemlidir.
Adres uyarıları
Projeniz Entity Framework Core kullanıyorsa, boş değer atanabilir başvuru türleriyle çalışma yönergelerini okumanız gerekir.
Geçişinizi başlattığınızda, yalnızca uyarıları etkinleştirerek başlamalısınız. Tüm bildirimler null değer atanabilir olarak kalır, ancak null durumu belki-null olarak değiştirildikten sonra bir değere başvuruda bulunduğunuzda uyarılar görürsünüz. Bu uyarıları ele aldıkça, daha fazla konumda null değerini denetleyeceksiniz ve kod tabanınız daha dayanıklı hale gelir. Farklı durumlara yönelik belirli teknikleri öğrenmek için Boş değer atanabilir uyarıları çözümleme teknikleri makalesine bakın.
Diğer kodlarla devam etmeden önce uyarıları ele alabilir ve her dosya veya sınıfta ek açıklamaları etkinleştirebilirsiniz. Ancak, tür ek açıklamalarını etkinleştirmeden önce bağlam uyarılar olduğunda oluşturulan uyarıları ele almak genellikle daha verimli olur. Bu şekilde, ilk uyarı kümesini ele alana kadar tüm türler dikkatsiz olur.
Tür ek açıklamalarını etkinleştirme
İlk uyarı kümesini ele aldıktan sonra ek açıklama bağlamını etkinleştirebilirsiniz. Bu, başvuru türlerini kullanımdan kaldırılamaz olarak değiştirir. ile var
bildirilen tüm değişkenler null atanabilir. Bu değişiklik genellikle yeni uyarılar sağlar. Derleyici uyarılarını ele almada ilk adım, bağımsız değişkenlerin veya dönüş değerlerinin ne zaman olabileceğini belirtmek için parametre ve dönüş türlerinde ek açıklamalar kullanmaktır ?
null
. Bu görevi yerine getirmek için amacınız yalnızca uyarıları düzeltmek değildir. Daha önemli hedef, derleyicinin olası null değerlere yönelik amacınızı anlamasını sağlamaktır.
Öznitelikler tür ek açıklamalarını genişletir
Değişkenlerin null durumu hakkında ek bilgileri ifade etmek için çeşitli öznitelikler eklenmiştir. API'lerinizin kuralları büyük olasılıkla tüm parametreler ve dönüş değerleri için null değil veya belki de null değerinden daha karmaşıktır. ÇOĞU API'nizin değişkenlerin olabileceği veya kullanılamayacağı durumlarda için daha karmaşık kuralları vardır null
. Böyle durumlarda, bu kuralları ifade etmek için öznitelikleri kullanırsınız. API'nizin semantiğini açıklayan öznitelikler, null atanabilir analizi etkileyen öznitelikler makalesinde bulunur.
Sonraki adımlar
Ek açıklamaları etkinleştirdikten sonra tüm uyarıları ele aldıktan sonra, projeniz için varsayılan bağlamı etkin olarak ayarlayabilirsiniz. Kodunuzda null atanabilir ek açıklama veya uyarı bağlamı için herhangi bir pragma eklediyseniz, bunları kaldırabilirsiniz. Zaman içinde yeni uyarılar görebilirsiniz. Uyarı içeren bir kod yazabilirsiniz. Boş değer atanabilir başvuru türleri için kitaplık bağımlılığı güncelleştirilebilir. Bu güncelleştirmeler, bu kitaplıktaki türleri null atanabilir veya null değer atanamaz olarak değiştirir.
Bu kavramları C# dilinde Null atanabilir güvenlikle ilgili Learn modülümüzde de inceleyebilirsiniz.