Aracılığıyla paylaş


Özel Durum Fırlatma

Uyarı

Bu içerik, Çerçeve Tasarım Yönergeleri: Kurallar, Deyimler ve Yeniden Kullanılabilir .NET Kitaplıkları için Desenler, 2. Sürüm'den Pearson Education, Inc.'in izniyle yeniden yazdırılır. Bu baskı 2008'de yayımlandı ve kitap o zamandan beri üçüncü baskıda tamamen revize edilmiştir. Bu sayfadaki bazı bilgiler güncel olmayabilir.

Bu bölümde açıklanan özel durum oluşturma yönergeleri, yürütme hatasının anlamının iyi bir tanımını gerektirir. Yürütme hatası, bir üyenin yapmak üzere tasarlandığı şeyi (üye adının belirttiği gibi) gerçekleştiremediği durumlarda oluşur. Örneğin, yöntem çağırana OpenFile açık bir dosya tanıtıcısı döndüremezse, yürütme hatası olarak kabul edilir.

Çoğu geliştirici, sıfıra bölme veya null başvuru gibi hatalı kullanımlar için istisnaları kullanmaya alışmıştır. Framework'te, yürütme hataları da dahil olmak üzere tüm hata koşulları için özel durumlar kullanılır.

❌ Hata kodlarını asla döndürmeyin.

Özel durumlar, çerçevelerdeki hataları raporlamanın birincil aracıdır.

✔️ İstisnalar oluşturarak yürütme hatalarını bildirin.

✔️ Kodunuz daha fazla yürütme için güvenli olmayan bir durumla karşılaşırsa özel durum oluşturmak yerine (.NET Framework 2.0 özelliğini) çağırarak System.Environment.FailFast işlemi sonlandırmayı GÖZ ÖNÜNDE BULUNDURUN.

❌ Mümkünse, normal denetim akışı için özel durumlar KULLANMAYIN.

Sistem hataları ve olası yarış koşullarına sahip işlemler dışında çerçeve tasarımcıları, kullanıcıların özel durum oluşturmayan kod yazabilmesi için API'ler tasarlamalıdır. Örneğin, bir üyeyi çağırmadan önce önkoşulları denetlemek için bir yol sağlayabilirsiniz, böylece kullanıcılar özel durum oluşturmayan kod yazabilir.

Başka bir üyenin önkoşullarını denetlemek için kullanılan üye genellikle bir testçi olarak adlandırılır ve işi gerçekten yerine getiren üyeye de doer adı verilir.

Tester-Doer Deseninin kabul edilemez bir performans yüküne sahip olabileceği durumlar vardır. Bu gibi durumlarda, sözde Try-Parse Deseni dikkate alınmalıdır (daha fazla bilgi için bkz Özel Durumlar ve Performans).

✔️ Özel durumlar oluşturmanın performans etkilerini GÖZ ÖNÜNDE BULUNDURUN. Saniye başına 100'ün üzerindeki atış hızları, çoğu uygulamanın performansını önemli ölçüde etkiler.

✔️ DO, üye sözleşmesinin ihlali nedeniyle (sistem hatası yerine) genel olarak çağrılabilen üyeler tarafından oluşan tüm özel durumları belgeleyin ve bunları sözleşmenizin bir parçası olarak değerlendirin.

Sözleşmenin bir parçası olan özel durumlar bir sürümden sonraki sürüme değişmemelidir (örneğin, özel durum türü değişmemelidir ve yeni özel durumlar eklenmemelidir).

❌ Bazı seçeneklere göre istisna fırlatabilen veya fırlatamayan genel üyeleriniz OLMAMALIDIR.

❌ Dönüş değeri veya out parametre olarak istisnaları döndüren genel üyelere SAHİP OLMAYIN.

Genel API'lerden özel durumları atmak yerine döndürmek, özel durum tabanlı hata raporlamanın birçok avantajını ortadan kaldırır.

✔️ Özel durum oluşturucu yöntemlerini kullanmayı GÖZ ÖNÜNDE BULUNDURUN.

Farklı yerlerden aynı istisnai durumu fırlatmak yaygın bir durumdur. Kod kabarmasını önlemek için, istisnalar oluşturan ve özelliklerini başlatan yardımcı yöntemler kullanın.

Ayrıca, özel durum oluşturan üyeler yerleştirilmiyor. Throw deyimini oluşturucunun içine taşımak, üyenin inlined olmasını sağlar.

❌ Özel durum filtresi bloklarından özel durumlar ATMAYIN.

Özel durum filtresi özel durum oluşturduğunda, özel durum CLR tarafından yakalanırken filtre false döndürür. Bu davranış, filtrenin yürütülmesinden ve açıkça yanlış döndürülmesinden ayırt edilemez ve bu nedenle hata ayıklaması çok zordur.

❌ Finally bloklarından açıkça özel durumlar oluşturmaKTAN KAÇıNıN. Yöntem çağrılarından kaynaklanan ve gizli olarak oluşan istisnalar kabul edilebilir.

Porsiyonlar © 2005, 2009 Microsoft Corporation. Tüm hakları saklıdır.

Pearson Education, Inc. tarafından Krzysztof Cwalina ve Brad Abrams'ın Yeniden Kullanılabilir .NET Kütüphaneleri için Çerçeve Tasarım Yönergeleri: Sözleşmeler, Deyimler ve Kalıplar, 2. Baskı eserinden izniyle yeniden basılmıştır. Addison-Wesley Professional tarafından Microsoft Windows Geliştirme Serisi kapsamında 22 Ekim 2008'de yayımlanmıştır.

Ayrıca bakınız