Aracılığıyla paylaş


Null denetim uyarılarını geliştirmek için bir kod tabanını nullable referans 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, kodunuzun bellek adresine yanlış başvuru yapabilme ihtimaline yönelik statik çözümlemeleri ve 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 analizini, null durumu değerlerini, belki-null ve null değil değerlerini ve nullable 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, amacınız projenizde null uyarılarının ve null kontrol açıklamalarının etkinleştirilmesidir. Bu hedefe ulaştığınızda, projenizde <nullable>Enable</nullable> ayarına sahip olacaksınız. Ayarları başka bir yerde ayarlamak için ön işlemci yönergelerine ihtiyacınız olmayacaktır.

Not

<Nullable> etiketi kullanarak projeniz için bir 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:

  1. Varsayılan olarak Null Atanabilir Devre Dışı: Proje dosyanıza bir Nullable öğesi eklemezseniz, devre dışı varsayılan ayar olur. Kod tabanına etkin olarak yeni dosyalar eklemediğinizde bu varsayılanı kullanın. Temel faaliyet, kitaplığı null değer 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.
  2. Varsayılan olarak nullable özelliğini 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.
  3. Null atanabilir uyarılar varsayılan olarak: İ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.
  4. Varsayılan olarak null belirtilen ek açıklamalar Uyarıları ele almadan önce kodu açıklamalarla not edin.

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 özellikli olarak etkinleştirilmesidir. Tüm yeni çalışmalar null değere duyarlı olacaktır; yalnızca mevcut kodun güncelleştirilmiş olması gerekir. Kütüphanenin kararlı olması ve geliştirmenin ana odak noktasının atanabilir başvuru türlerini benimsemek olduğu durumlarda, varsayılan olarak atanabilir türleri devre dışı bırakmak daha iyi çalışır. API'lere açıklama eklerken null atanabilir başvuru türlerini etkinleştirirsiniz. İşinizi bitirdiğinizde, projenin tamamı için nullable referans türlerini etkinleştirirsiniz. Yeni bir dosya oluşturduğunuzda, önişlemci yönergelerini eklemeniz ve dosyayı boş değer farkındalığına sahip hale getirmeniz gerekir. Takımınızdaki herhangi bir geliştirici unutursa, bu yeni kod artık tüm kodları nullable farkındalığına sahip hale getirmek için iş listesine 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 atanabilirlik bağlamı, oluşturulan kod dosyaları için geçerli değildir. Her iki strateji altında da, oluşturulmuş 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:

  1. .editorconfig dosyasında, belirli bir dosyaya uygulanan bölümde generated_code = true belirtin.
  2. Dosyanın en üstüne bir açıklama olarak <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.
  3. Dosya adını TemporaryGeneratedFile_ ile başlatma
  4. 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 edilebilirliği nasıl gördüğünü kontrol eder. Her tür üç null değişkenden birine sahiptir:

  • oblivious: Ek açıklama bağlamı devre dışı bırakıldığında tüm referans 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: Açıklamalı bir referans türü, C?null atanabilir, ancak açıklama bağlamı devre dışı bırakıldığında bir uyarı verilebilir. var ile bildirilen değişkenler, ek açıklama bağlamı etkinleştirildiğinde null atanabilir olur.

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 yapılabilir türler, belki-null olduğunda başvurulduğunda uyarılara neden olur.
  • Null olabilir ve uyarı bağlamı etkinleştirildiğinde doğrudan referans verilen türler uyarılara neden olur.

Her değişkenin, nuledilebilirlik durumuna bağlı olarak varsayılan bir nuledilebilir durumu vardır.

  • Null atanabilir değişkenlerin varsayılan null-durumubelki-null olur.
  • Null değer atanamayan değişkenlerin varsayılan null-durumunull değil olarak tanımlanır.
  • Null atanabilir belirsiz değişkenler varsayılan null olmayan null durumunasahiptir.

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 not-null 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ğere karşı duyarsız olarak kalır, ancak bir değeri null durumubelki-null olarak değiştikten sonra başvurduğ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 içerdiğinde 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 açıklamalarını etkinleştir

İlk uyarı kümesini ele aldıktan sonra ek açıklama bağlamını etkinleştirebilirsiniz. Bu, başvuru türlerini farksız olandan boş bırakılamaz olana değiştirir. ile bildirilen tüm değişkenler null yapılabilir. Bu değişiklik genellikle yeni uyarılar sağlar. Derleyici uyarılarını ele almanın ilk adımı, bağımsız değişkenlerin veya dönüş değerlerinin null olabileceğini belirtmek için parametre ve dönüş türlerinde ? ek açıklamalarını kullanmaktır. 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ı, muhtemelen tüm parametreler ve dönüş değerleri için null değil veya belki 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. Nullable referans türleri için bir kitaplık bağımlılığı güncellenebilir. Bu güncellemeler, bu kitaplıktaki null değeri göz ardı eden türleri, null atanamaz veya null atanabilir olarak değiştirir.

Bu kavramları Learn modülümüzde Null atamaları güvenliği ile ilgili C# dilinde de inceleyebilirsiniz.