Aracılığıyla paylaş


Uyumluluk kurallarını değiştirme

.NET, geçmişi boyunca sürümden sürüme ve .NET uygulamaları arasında yüksek düzeyde uyumluluk sağlamaya çalıştı. .NET Framework ile karşılaştırıldığında .NET 5 (ve .NET Core) ve sonraki sürümleri yeni bir teknoloji olarak kabul edilebilir, ancak iki önemli faktör bu .NET uygulamasının .NET Framework'ten ayrışma becerisini sınırlar:

  • Çok sayıda geliştirici başlangıçta .NET Framework uygulamaları geliştirmiş veya geliştirmeye devam ediyor. .NET uygulamalarında tutarlı bir davranış beklerler.
  • .NET Standart kitaplık projeleri, geliştiricilerin .NET Framework ve .NET 5 (ve .NET Core) ve sonraki sürümleri tarafından paylaşılan ortak API'leri hedefleyen kitaplıklar oluşturmasına olanak tanır. Geliştiriciler, .NET uygulamasında kullanılan bir kitaplığın .NET Framework uygulamasında kullanılan kitaplıkla aynı şekilde davranmasını bekler.

Geliştiriciler. .NET uygulamaları arasındaki uyumluluğun yanı sıra, belirli bir .NET uygulamasının sürümleri arasında yüksek düzeyde uyumluluk bekler. Özellikle, .NET Core'un önceki bir sürümü için yazılmış kod .NET 5 veya sonraki bir sürümde sorunsuz bir şekilde çalıştırılmalıdır. Aslında, birçok geliştirici .NET'in yeni yayınlanan sürümlerinde bulunan yeni API'lerin bu API'lerin tanıtıldığı yayın öncesi sürümlerle de uyumlu olmasını bekler.

Bu makalede uyumluluğu ve .NET ekibinin her değişiklik türünü değerlendirme şeklini etkileyen değişiklikler özetlenmektedir. .NET ekibinin potansiyel yıkıcı değişikliklere nasıl yaklaştığını anlamak, mevcut .NET API'lerinin davranışını değiştiren çekme istekleri açan geliştiriciler için özellikle yararlıdır.

Aşağıdaki bölümlerde.NET API'lerinde yapılan değişikliklerin kategorileri ve bunların uygulama uyumluluğu üzerindeki etkileri açıklanmaktadır. Değişikliklere izin verilir (✔️), izin verilmez (❌) veya önceki davranışın () ne kadar öngörülebilir, belirgin ve tutarlı olduğu ❓ konusunda karar ve değerlendirme gerektirir.

Uyarı

  • Kitaplık geliştiricileri, .NET kitaplıklarındaki değişikliklerin nasıl değerlendirildiğini gösteren bir kılavuz olarak hizmet vermenin yanı sıra, birden çok .NET uygulamasını ve sürümünü hedefleyen kitaplıklarındaki değişiklikleri değerlendirmek için de bu ölçütleri kullanabilir.
  • İleri ve geri uyumluluk gibi uyumluluk kategorileri hakkında bilgi için bkz. Kod değişiklikleri uyumluluğu nasıl etkileyebilir?

Genel sözleşmede yapılan değişiklikler

Bu kategorideki değişiklikler, bir türün genel yüzey alanını değiştirir. Bu kategorideki değişikliklerin çoğu geriye dönük uyumluluğu ihlal ettiğinden izin verilmiyor (API'nin önceki bir sürümüyle geliştirilen bir uygulamanın daha sonraki bir sürümde yeniden derleme olmadan yürütülebilmesi).

Türler

  • ✔️ İzİn VERİlDİ: Arabirim zaten bir temel tür tarafından uygulandığında bir türdeki arabirim uygulamasını kaldırma

  • YARGI GEREKTİRİR: Bir türe yeni arabirim uygulaması ekleme

    Bu, mevcut istemcileri olumsuz etkilemediğinden kabul edilebilir bir değişikliktir. Türdeki tüm değişiklikler, yeni uygulamanın kabul edilebilir kalması için burada tanımlanan kabul edilebilir değişikliklerin sınırları içinde çalışmalıdır. Tasarımcının veya seri hale getiricinin alt düzeyde tüketilemeyen kod veya veri oluşturma becerisini doğrudan etkileyen arabirimler eklerken çok dikkatli olunması gerekir. Örneğin ISerializable arabirimidir.

  • HÜKÜM GEREKTİRİR: Yeni bir temel sınıfa giriş

    Yeni soyut üyeler sunmaz veya mevcut türlerin semantiğini veya davranışını değiştirmezse, mevcut iki tür arasındaki bir hiyerarşiye bir tür tanıtılabilir. Örneğin, .NET Framework 2.0'da DbConnection sınıfı, daha önce doğrudan SqlConnection öğesinden türetilmiş olan Component için yeni bir temel sınıf haline geldi.

  • ✔️ İzin Verildi: Bir türü bir derlemeden diğer bir derlemeye taşıma

    Eski bileşen, yeni bileşeni gösteren TypeForwardedToAttribute ile işaretlenmelidir.

  • ✔️ İzin Verildi: Yapı türünü readonly struct türüne değiştirmek

    Bir readonly struct türü struct türüne değiştirmek mümkün değildir.

  • ✔️ İzİn VERİlDİ: Erişilebilir (genel veya korumalı) oluşturucular olmadığında bir türe korumalı veya soyut anahtar sözcüğü ekleme

  • ✔️ İzin Verildi: Türün görünürlüğünü genişletme

  • İZIN VERilmeyen: Bir türün ad alanını veya adını değiştirme

  • Yasak: Genel türün yeniden adlandırılması veya kaldırılması

    Bu, yeniden adlandırılan veya kaldırılan türü kullanan tüm kodları keser.

    Uyarı

    Nadir durumlarda,.NET bir genel API'yi kaldırabilir. Daha fazla bilgi için bkz. .NET'te API kaldırma. hakkında bilgi için. NET'in destek ilkesi, bkz. .NET Destek İlkesi.

  • İZİN VERİLMEYEN: Numaralandırmanın temel türünü değiştirme

    Bu, derleme zamanı ve davranışsal kırılma değişikliği olmasının yanı sıra öznitelik bağımsız değişkenlerini ayrıştırılamaz hale getirebilecek bir ikili kırılma değişikliğidir.

  • İZİN VERİLMEYEN İŞLEM: Daha önce kapatılmamış bir türü kapatma

  • İZIN VERilmeyen: Bir arabirimin temel türleri kümesine arabirim ekleme

    Bir arabirim daha önce uygulamadığı bir arabirim uygularsa, arabirimin özgün sürümünü uygulayan tüm türler bozulur.

  • YARGILAMA GEREKTİRİSİ: Temel sınıflar kümesinden veya uygulanan arabirim kümesinden bir sınıfı kaldırma

    Arabirimi kaldırma kuralında bir özel durum vardır: Kaldırılan arabirimden türetilen bir arabirimin uygulamasını ekleyebilirsiniz. Örneğin, IDisposable ve IComponent öğelerini uygulayan tür veya arabirim artık IDisposable öğesini uyguluyorsa, IDisposable'ı kaldırabilirsiniz.

  • İZİN VERİLMEYEN: Bir readonly struct türünü yapı türüne değiştirme

    Bir struct türünün readonly struct türüne değiştirilmesine izin verilir, ancak.

  • İzin verilmeyen: yapı türünü ref struct türüne değiştirme ve tam tersi

  • İZIN VERilmeyen: Türün görünürlüğünü azaltma

    Ancak, bir türün görünürlüğünü artırmaya izin verilir.

Üyeler

  • ✔️ İzİn VERİlDİ: Sanal olmayan bir üyenin görünürlüğünü genişletme

  • ✔️ İzİn VERİlDİ: Erişilebilir (genel veya korumalı) oluşturucuları olmayan veya türü korumalı olan bir ortak türe soyut üye ekleme

    Ancak, erişilebilir (genel veya korumalı) oluşturucuları olan ve sealed olmayan bir türe soyut üye eklenmesine izin verilmez.

  • ✔️ İzİn VERİlDİ: Türün erişilebilir (genel veya korumalı) oluşturucuları olmadığında veya tür korumalı olduğunda korumalı üyenin görünürlüğünü kısıtlama

  • ✔️ İzİn VERİlDİ: Bir üyeyi hiyerarşide kaldırıldığı türden daha yüksek bir sınıfa taşıma

  • ✔️ İzin Verildi: Üstünlük tanıma eklenmesi veya kaldırılması

    Bir geçersiz kılma tanıtmak, önceki kullanıcıların base'i çağırırken bu geçersiz kılmayı atlamalarına neden olabilir.

  • ✔️ İzin Verildi: Sınıfa bir oluşturucu eklemek, eğer sınıfın daha önce oluşturucuları yoksa bunun yanında parametresiz bir oluşturucu eklemek

    Ancak, daha önce hiç oluşturucu içermeyen bir sınıfa parametresiz oluşturucu eklemeden oluşturucu eklemek izin verilmez.

  • ✔️ İzİn VERİlDİ: Bir üyeyi soyuttansanala değiştirme

  • ✔️ İzin Verildi: bir ref readonly değerinden bir ref dönüş değerine değiştirme (sanal metotlar veya arayüzler dışında)

  • ✔️ İzin Verildi: Bir alandan salt okunur özelliği, alanın statik türü değiştirilebilir bir değer türü olmadığı sürece kaldırılıyor

  • ✔️ İzİn VERİlDİ: Daha önce tanımlanmamış yeni bir olayı çağırma

  • YARGI GEREKTİRİR: Türe yeni örnek alanı ekleme

    Bu değişiklik serileştirmeyi etkiler.

  • İZIN VERilmeyen: Genel üyeyi veya parametreyi yeniden adlandırma veya kaldırma

    Bu, yeniden adlandırılan veya kaldırılan üyeyi veya parametreyi kullanan tüm kodu keser.

    Bu, bir özellikten bir alıcı veya ayarlayıcıyı kaldırmayı veya yeniden adlandırmayı ve numaralandırma üyelerini yeniden adlandırmayı veya kaldırmayı içerir.

  • YARGI GEREKTİRİR: Arayüze bir üye eklemek

    .NET sürümünüzü .NET Core 3.0'a (C# 8.0) yükselttiği için geriye dönük uyumsuz bir değişiklik olduğundan, varsayılan arabirim üyeleri (DIM'ler) tanıtıldığında, bir arabirime statik, soyut olmayan, sanal olmayan bir üye eklenmesine izin verilir.

    Bir uygulama sağlarsanız, var olan bir arabirime yeni bir üye eklemek, aşağı akış derlemelerinde derleme hatalarıyla sonuçlanmayacaktır. Ancak tüm diller DIM'leri desteklemez. Ayrıca bazı senaryolarda, çalışma zamanı hangi varsayılan arabirim üyesinin çağrılabileceğine karar veremiyor. Bazı senaryolarda arabirimler ref struct türler tarafından uygulanır. ref struct Türler kutulanamadığından arabirim türlerine dönüştürülemez. Bu nedenle, ref struct türler her arabirim üyesi için örtük bir uygulama sağlamalıdır. Arabirim tarafından sağlanan varsayılan uygulamayı kullanamazlar. Bu nedenlerden dolayı, mevcut bir arabirime üye eklerken yargıyı kullanın.

  • YASAK: Genel bir sabitin veya sabit listesi üyesinin değerini değiştirmek

  • İZIN VERilmeyen: Özellik, alan, parametre veya dönüş değerinin türünü değiştirme

  • İZIN VERilmeyen: Parametreleri ekleme, kaldırma veya sırasını değiştirme

  • İZIN VERilmeyen: Bir parametreden in, out veya ref anahtar sözcüğünü ekleme veya kaldırma

  • İZİN VERİLMİYOR: Parametreyi yeniden adlandırma (büyük/küçük harf değiştirme dahil)

    Bu, iki nedenden dolayı hata olarak kabul edilir:

  • İZİN VERİLMEYEN: Bir ref dönüş değerinden bir ref readonly dönüş değerine değiştirmek

  • ❌️ İzin Verilmeyen: Sanal bir yöntem veya arabirimde dönüş değerini ref readonly'dan ref'ya değiştirme

  • Üyeye soyut ekleme veya çıkarmaya izin verilmedi

  • İZİN VERİLMEYEN: Üyeden sanal anahtar sözcüğünün kaldırılması

  • İZİN VERİLMEYEN: Bir üyeye sanal anahtar kelime ekleme

    C# derleyicisi sanal olmayan yöntemleri çağırmak için callvirt Ara Dil (IL) yönergeleri yayma eğiliminde olduğundan bu genellikle hataya neden olan bir değişiklik olmasa da (callvirt boşluk denetimi yapar, normal bir çağrı yapmaz), bu davranış çeşitli nedenlerden dolayı sabit değildir:

    • C#, .NET'in hedeflediği tek dil değildir.
    • C# derleyicisi, hedef yöntemin sanal olmadığı ve büyük olasılıkla null olmadığı durumlarda (callvirt aracılığıyla erişilen yöntemler gibi), giderek daha fazla normal bir çağrıya iyileştirmeye çalışır.

    Yöntemi sanal hale getirmek, tüketici kodunun genellikle sanal olmayan bir şekilde çağıracağı anlamına gelir.

  • İZİN VERİLMEDİ: Sanal üyeyi soyut hale getirme

    Sanal üye, türetilmiş bir sınıf tarafından geçersiz kılınabilen bir yöntem uygulaması sağlar. Soyut üye hiçbir uygulama sağlamaz ve üzerine yazılması gerekir.

  • İZIN VERilmeyen: Korumalı anahtar sözcüğü bir arabirim üyesine ekleme

    Varsayılan arabirim üyesine eklemek sealed , bunu sanal olmayan hale getirir ve türetilmiş bir türün bu üyenin uygulamasının çağrılmasını engeller.

  • YASAK: Genel veya korumalı oluşturuculara sahip ve mühürlü olmayan bir açık türe soyut üye ekleme

  • İZİN VERİLMEYEN: Bir üyenin statik anahtar sözcüğünü eklemek veya kaldırmak

  • İzin Verilmeyen: Mevcut bir aşırı yüklemeyi önleyip farklı bir davranış tanımlayan bir aşırı yükleme ekleme

    Bu, önceki aşırı yüklemeye bağlı olan mevcut istemcileri bozar. Örneğin, bir sınıf kabul eden UInt32bir yöntemin tek bir sürümüne sahipse, mevcut bir tüketici bir değer geçirirken Int32 bu aşırı yüklemeye başarıyla bağlanır. Ancak, yeniden derlerken veya geç bağlama kullanırken bir Int32 kabul eden bir aşırı yükleme eklerseniz, derleyici artık yeni aşırı yüklemeye bağlanacaktır. Eğer farklı bir davranış ortaya çıkarsa, bu köklü bir değişikliktir.

  • Yasak: Daha önce hiç oluşturucu içermeyen bir sınıfa, parametresiz bir oluşturucu eklemeden oluşturucu eklemek

  • ❌️ İZIN VERilmeyen: Alana salt okunur ekleme

  • İZIN VERilmeyen: Bir üyenin görünürlüğünü azaltma

    Bu, erişilebilir ( veya public) oluşturucular olduğunda ve tür protectedolmadığındakorumalı bir üyenin görünürlüğünü azaltmayı içerir. Böyle bir durum söz konusu değilse, korumalı üyenin görünürlüğünü azaltmaya izin verilir.

    Üyenin görünürlüğünü artırmaya izin verilir.

  • İzin verilmeyen: Bir üyenin türünün değiştirilmesi

    Bir yöntemin dönüş değeri veya özellik veya alan türü değiştirilemez. Örneğin, bir Object döndüren yöntemin imzası, bir String döndürecek şekilde değiştirilemez veya tam tersi.

  • İzin verilmeyen: Özel olmayan alanları olmayan bir yapıya örnek alan ekleme

    Bir yapı yalnızca genel alanlara sahipse veya hiç alana sahip değilse, çağıranlar yapının oluşturucusunu çağırmadan veya yereli default(T) olarak başlatmadan bu yapı türünün yerellerini bildirebilir; yeter ki ilk kullanımdan önce yapıda tüm genel alanlar ayarlanmış olsun. Bu türe genel veya özel yeni alanlar eklemek, bu arayanlar için yapı uyumsuzluğu oluşturan bir değişikliktir; çünkü derleyici artık ek alanların başlatılmasını zorunlu kılacaktır.

    Ayrıca, alanları olmayan veya yalnızca genel alanları olan bir yapıya yeni alanlar (genel veya özel) eklemek, kodlarında [SkipLocalsInit] uygulayan çağıranlar için ikili uyumsuzluğa neden olan bir değişikliktir. Derleyici derleme zamanında bu alanların farkında olmadığından, yapıyı tam olarak başlatmayan IL kodunu çıkarabilir, bu da yapının başlatılmamış yığın verilerinden oluşturulmasıyla sonuçlanabilir.

    Yapıda herhangi bir gizli alan varsa, derleyici, oluşturucu veya default(T) aracılığıyla başlatmayı zorunlu kılar ve yeni örnek alanları eklemek uyumsuzluk yaratmaz.

  • Yasak: Daha önce hiç tetiklenmemiş mevcut bir olayı tetiklemek

Davranış değişiklikleri

Bileşenler

  • ✔️ İzİn VERİlDİ: Aynı platformlar hala desteklendiğinde bir derlemenin taşınabilir hale getirilmesi

  • İZİN VERİLMEYEN: Derlemenin adının değiştirilmesi

  • İZİN VERİLMEYEN: Derlemenin ortak anahtarını değiştirme

Özellikler, alanlar, parametreler ve dönüş değerleri

  • ✔️ İZİn VERİlDİ: Bir özelliğin, alanın, dönüş değerinin veya out parametresinin değerini daha türetilmiş bir türe değiştirme

    Örneğin, Object türünü döndüren bir yöntem String örneği döndürebilir. (Ancak, yöntem imzası değiştirilemez.)

  • ✔️ İzİn VERİlDİ: Üye sanal değilse bir özellik veya parametre için kabul edilen değer aralığını artırma

    Yöntemine geçirilebilen veya üye tarafından döndürülen değer aralığı genişletilebilir ancak parametre veya üye türü genişletilemez. Örneğin, bir yönteme geçirilen değerler 0-124'ten 0-255'e genişletilebilirken, parametre türü olarak ByteInt32değiştirilemez.

  • İzin Verilmeyen: Üye sanalsa bir özellik veya parametre için kabul edilen değer aralığını artırma

    Bu değişiklik, genişletilmiş değer aralığında düzgün çalışmayacak olan mevcut geçersiz kılınan üyeleri bozuyor.

  • İZIN VERİlMEDİ: Bir özellik veya parametre için kabul edilen değer aralığını azaltma

  • İZIN VERilmeyen: Bir özellik, alan, dönüş değeri veya out parametresi için döndürülen değer aralığını artırma

  • DISALLOWED: Bir özellik, alan, yöntem dönüş değeri veya out parametresi için döndürülen değerleri değiştirme

  • İZIN VERilmeyen: Özellik, alan veya parametrenin varsayılan değerini değiştirme

    Parametre varsayılan değerini değiştirmek veya kaldırmak ikili bir kesme değildir. Parametre varsayılan değerinin kaldırılması kaynak kodda bir kesmeye yol açar ve parametre varsayılan değerinin değiştirilmesi, kodun yeniden derlenmesinden sonra davranışta bir bozulmaya neden olabilir.

    Bu nedenle, belirsizliği ortadan kaldırmak için bu varsayılan değerleri yeni bir yöntem aşırı yüklemesine "taşıma" durumunda parametre varsayılan değerlerinin kaldırılması kabul edilebilir. Örneğin, mevcut bir yöntemi MyMethod(int a = 1)düşünün. İki isteğe bağlı parametre MyMethod ve a ile bir aşırı yükleme b eklerseniz, a'ün varsayılan değerini yeni aşırı yüklemeye taşıyarak uyumluluğu koruyabilirsiniz. Şu anda iki aşırı yükleme MyMethod(int a) ve MyMethod(int a = 1, int b = 2) şeklindedir. Bu desen MyMethod()'ün derlenmesine olanak tanır.

  • İzin verilmiyor: Sayısal dönüş değerinin hassasiyetini değiştirme

  • HÜKÜM GEREKTİRİR: Belgelerde belirtilmemiş olsa bile, girdi ayrıştirmasının ve yeni hata durumları oluşturmanın değişiklikleri

Özel durumlar

  • ✔️ İzİn VERİlDİ: Mevcut bir özel durumdan daha türetilmiş bir özel durum oluşturma

    Yeni özel durum mevcut bir özel durumun alt sınıfı olduğundan, önceki özel durum işleme kodu özel durumu işlemeye devam eder. Örneğin, .NET Framework 4'te kültür oluşturma ve alma yöntemleri, kültür bulunamadığında CultureNotFoundException yerine bir ArgumentException fırlatmaya başladı. ' CultureNotFoundException den ArgumentExceptiontüretildiği için bu kabul edilebilir bir değişikliktir.

  • ✔️ İZİN VERİLDİ: NotSupportedException, NotImplementedException, NullReferenceException değerlerinden daha spesifik bir özel durum fırlatma

  • ✔️ İzİn VERİlDİ: Kurtarılamaz olarak kabul edilen bir özel durum oluşturma

    Kurtarılamayan özel durumlar yakalanmamalı, bunun yerine üst düzey genel bir işleyici tarafından işlenmelidir. Bu nedenle, kullanıcıların bu açık özel durumları yakalayan koda sahip olması beklenmez. Kurtarılamaz özel durumlar şunlardır:

  • ✔️ İzİn VERİlDİ: Yeni bir kod yolunda yeni bir özel durum oluşturma

    Özel durum, yalnızca yeni parametre değerleri veya durumuyla yürütülen ve önceki sürümle uyumlu mevcut kod tarafından yürütülemeyen yeni bir yürütme yolu için geçerli olmalıdır.

  • ✔️ İzİn VERİlDİ: Daha sağlam davranış veya yeni senaryolar sağlamak için özel durumu kaldırma

    Örneğin, daha önce yalnızca pozitif değerleri işleyen ve başka bir değer oluşturan bir DivideArgumentOutOfRangeException yöntem, özel durum oluşturmadan hem negatif hem de pozitif değerleri destekleyecek şekilde değiştirilebilir.

  • ✔️ İzİn VERİlDİ: Hata iletisinin metnini değiştirme

    Geliştiriciler hata iletilerinin metnine güvenmemelidir ve bu, kullanıcının kültürüne göre de değişir.

  • YASAK: Yukarıda listelenmeyen başka hiçbir durumda istisna fırlatma

  • İZİN VERİLMEDİ: Yukarıda listelenmeyen başka bir durumda bir istisnayı kaldırmak

Özellikler

  • ✔️ İzİn VERİlDİ: Gözlemlenemeyen bir özniteliğin değerini değiştirme

  • İZİN VERİLMEDİ: Gözlemlenebilir bir özniteliğin değerini değiştirme

  • HÜKÜM GEREKTİRİYOR: Özniteliği kaldırma

    Çoğu durumda, bir özniteliğin (örneğin NonSerializedAttribute) kaldırılması bozucu bir değişikliktir.

Platform desteği

  • ✔️ İzİn VERİlDİ: Daha önce desteklenmeyen bir platformda bir işlemi destekleme

  • İZİN VERİLMEDİ: Platformda daha önce desteklenen bir işlem için belirli bir hizmet paketinin artık desteklenmemesi veya şimdi gerektirilmesi

İç uygulama değişiklikleri

  • Karar Verme Gerektirir: Bir iç türün yüzey alanını değiştirmek

    Bu tür değişikliklere genellikle izin verilir, ancak bunlar özel yansımayı bozar. Popüler üçüncü taraf kitaplıklarının veya çok sayıda geliştiricinin iç API'lere bağımlı olduğu bazı durumlarda, bu tür değişikliklere izin verilmeyebilir.

  • YARGI GEREKTİRİSİ: Bir üyenin iç uygulamasını değiştirme

    Bu değişikliklere genellikle izin verilir, ancak özel yansımayı bozarlar. Müşteri kodunun sık sık özel yansımaya bağımlı olduğu veya değişikliğin istenmeyen yan etkilere neden olduğu bazı durumlarda, bu değişikliklere izin verilmeyebilir.

  • ✔️ İzİn VERİlDİ: bir işlemin performansını geliştirme

    Bir işlemin performansını değiştirme özelliği önemlidir, ancak bu tür değişiklikler bir işlemin geçerli hızına bağlı olan kodu bozabilir. Bu, özellikle zaman uyumsuz işlemlerin zamanlamasına bağlı olan kodlar için geçerlidir. Performans değişikliğinin söz konusu API'nin diğer davranışları üzerinde hiçbir etkisi olmamalıdır; aksi takdirde, değişiklik bozulacaktır.

  • ✔️ İzİn VERİlDİ: Bir işlemin performansını dolaylı olarak (ve genellikle olumsuz şekilde) değiştirme

    Söz konusu değişiklik başka bir nedenle hata olarak kategorize edilmezse, bu kabul edilebilir bir durumdur. Genellikle, ek işlemler içerebilecek veya yeni işlevler ekleyebilen eylemlerin yapılması gerekir. Bu neredeyse her zaman performansı etkiler, ancak söz konusu API'nin beklendiği gibi çalışması için gerekli olabilir.

  • İzin verilmeyen: Eşzamanlı bir API'yi eşzamansız olarak değiştirme (ve tam tersi)

Kod değişiklikleri

  • ✔️ İzİn VERİlDİ: Bir parametreye params ekleme

  • İzin Verilmeyen: Bir yapıyıbir sınıfa veya tam tersine değiştirme

  • İZİN VERİLMEYEN: kontrol edilen ifadesini bir kod bloğuna ekleme

    Bu değişiklik, daha önce çalıştırılan kodun bir OverflowException hatası vermesine neden olabilir ve bu durum kabul edilemez.

  • DISALLOWED: Bir parametreden params kaldırma

  • Yasak: Olayların tetiklenme sırasını değiştirme

    Geliştiriciler, olayların aynı sırada tetikleneceğini makul bir beklentiyle bekleyebilir ve geliştirici kodu genellikle bu olayların tetiklenme sırasına bağımlıdır.

  • İzin Verilmeyen: Belirli bir eylemde bir olayın tetiklenmesini engelleme

  • İZİN VERİLMEYEN: Belirli olayların çağrılma sayısını değiştirme

  • İzin verilmeyen: numaralandırma türüne FlagsAttribute ekleme

Ayrıca bakınız