Dışarıya aktar (0) Yazdır
Tümünü Genişlet
Bu makale makine tarafından çevrilmiştir. Orijinal metni görmek için imlecinizi makaledeki cümlelerin üzerine getirin. Daha Fazla Bilgi.
Çeviri
Original

Exception Sınıf

Uygulama yürütmesi sırasında oluşan hataları gösterir.

Ad alanı:  System
Derleme:  mscorlib (mscorlib.dll içinde)

[SerializableAttribute]
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
public class Exception : ISerializable, _Exception

Exception türü aşağıdaki üyeleri ortaya koyar.

  AdAçıklama
Genel yöntemXNA Framework tarafından desteklenirTaşınabilir Sınıf Kitaplığı tarafından desteklenirDestekleyen: Windows Mağazası uygulamaları için .NETException() Exception sınıfının yeni bir örneğini başlatır.
Genel yöntemXNA Framework tarafından desteklenirTaşınabilir Sınıf Kitaplığı tarafından desteklenirDestekleyen: Windows Mağazası uygulamaları için .NETException(String)Yeni bir örneğini başlatır Exception belirtilen hata iletisi ile sınıf.
Korumalı yöntemException(SerializationInfo, StreamingContext)Yeni bir örneğini başlatır Exception seri hale getirilmiş verileri ile sınıf.
Genel yöntemXNA Framework tarafından desteklenirTaşınabilir Sınıf Kitaplığı tarafından desteklenirDestekleyen: Windows Mağazası uygulamaları için .NETException(String, Exception)Yeni bir örneğini başlatır Exception belirtilen hata iletisi ve bu özel durum nedeni iç özel duruma başvuru ile sınıf.
Üst

  AdAçıklama
Genel özellikTaşınabilir Sınıf Kitaplığı tarafından desteklenirDestekleyen: Windows Mağazası uygulamaları için .NETDataÖzel durum hakkında kullanıcı tanımlı ek bilgiler sağlayan anahtar/değer çiftleri topluluğu alır.
Genel özellikTaşınabilir Sınıf Kitaplığı tarafından desteklenirDestekleyen: Windows Mağazası uygulamaları için .NETHelpLinkAlır veya bağlantı için bu özel durumla ilişkilendirilmiş bir Yardım dosyası ayarlar.
Genel özellikXNA Framework tarafından desteklenirTaşınabilir Sınıf Kitaplığı tarafından desteklenirDestekleyen: Windows Mağazası uygulamaları için .NETHResultAlır veya ayarlar HRESULT, belirli bir özel durum için atanan kodlanmış bir sayısal değer.
Genel özellikXNA Framework tarafından desteklenirTaşınabilir Sınıf Kitaplığı tarafından desteklenirDestekleyen: Windows Mağazası uygulamaları için .NETInnerExceptionAlır Exception geçerli özel durumun oluşmasına neden örneği.
Genel özellikXNA Framework tarafından desteklenirTaşınabilir Sınıf Kitaplığı tarafından desteklenirDestekleyen: Windows Mağazası uygulamaları için .NETMessageGeçerli özel durumun açıklayan bir ileti alır.
Genel özellikTaşınabilir Sınıf Kitaplığı tarafından desteklenirDestekleyen: Windows Mağazası uygulamaları için .NETSourceAlır veya uygulama veya hataya neden olan nesnenin adını ayarlar.
Genel özellikXNA Framework tarafından desteklenirTaşınabilir Sınıf Kitaplığı tarafından desteklenirDestekleyen: Windows Mağazası uygulamaları için .NETStackTraceÇağrı yığını üzerinde hemen çerçeveler dize gösterimini alır.
Genel özellikTargetSiteGeçerli durum oluşturduğunda yöntemi alır.
Üst

  AdAçıklama
Genel yöntemXNA Framework tarafından desteklenirTaşınabilir Sınıf Kitaplığı tarafından desteklenirDestekleyen: Windows Mağazası uygulamaları için .NETEquals(Object) Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Object kaynağından devralındı.)
Korumalı yöntemXNA Framework tarafından desteklenirTaşınabilir Sınıf Kitaplığı tarafından desteklenirDestekleyen: Windows Mağazası uygulamaları için .NETFinalize Atık toplama işlemi tarafından alınmadan önce nesnenin kaynaklarını boşaltmayı denemesine izin verir. (Object kaynağından devralındı.)
Genel yöntemXNA Framework tarafından desteklenirTaşınabilir Sınıf Kitaplığı tarafından desteklenirDestekleyen: Windows Mağazası uygulamaları için .NETGetBaseExceptionTüretilmiş bir sınıfta geçersiz kılındı zaman verir Exception yani kök nedenini izleyen bir veya daha fazla özel durumlar.
Genel yöntemXNA Framework tarafından desteklenirTaşınabilir Sınıf Kitaplığı tarafından desteklenirDestekleyen: Windows Mağazası uygulamaları için .NETGetHashCodeVarsayılan karma işlevi hizmet verir. (Object kaynağından devralındı.)
Genel yöntemGetObjectDataTüretilmiş bir sınıfta geçersiz kılındı zaman, ayarlar SerializationInfo özel durum hakkında bilgi.
Genel yöntemXNA Framework tarafından desteklenirTaşınabilir Sınıf Kitaplığı tarafından desteklenirDestekleyen: Windows Mağazası uygulamaları için .NETGetTypeGeçerli örnek çalışma zamanı türü alır.

XNA Framework 3.0 içinde bu üye Object kaynağından devralındı.GetType().


Taşınabilir Sınıf Kitaplığı Taşınabilir Sınıf Kitaplığı içinde bu üye Object kaynağından devralındı.GetType().


Windows Mağazası uygulamaları için .NET Windows 8 içinde bu üye Object kaynağından devralındı.GetType().
Korumalı yöntemXNA Framework tarafından desteklenirTaşınabilir Sınıf Kitaplığı tarafından desteklenirDestekleyen: Windows Mağazası uygulamaları için .NETMemberwiseCloneMevcut Object'in basit bir kopyasını oluşturur. (Object kaynağından devralındı.)
Genel yöntemXNA Framework tarafından desteklenirTaşınabilir Sınıf Kitaplığı tarafından desteklenirDestekleyen: Windows Mağazası uygulamaları için .NETToStringOluşturur ve geçerli özel durumun dize halinde temsilini döndürür. (Object.ToString() geçersiz kılınır.)
Üst

  AdAçıklama
Korumalı olaySerializeObjectStateSeri hale getirilmiş bir özel durum özel durum hakkında veri içeren bir özel durum nesnesi oluşturmak için seri oluşur.
Üst

  AdAçıklama
Genel Genişletme YöntemiPrepareForRethrow (ExceptionExtensions tarafından tanımlandı.)
Üst

Bu sınıf, tüm özel durumlar için temel sınıftır. Bir hata oluştuğunda, sistem veya o sırada yürütülen uygulamanın bu hata hakkında bilgi içeren bir özel durumun üretilmesini tarafından bildirir. Bir özel durum oluşturulduktan sonra uygulama veya varsayılan özel durum işleyicisi tarafından işlenir.

Bu bölümde:

Hatalar ve özel durumlar
Try/catch bloğu
Özel durum türü özellikleri
Özel durum sınıfı özellikleri
Performans değerlendirmeleri
Standart özel durumlar seçme
Özel durum uygulama

Hatalar ve özel durumlar

Çalışma zamanı hataları, çeşitli nedenlerden dolayı ortaya çıkabilir. Ancak, tüm hatalar kodunuzdaki özel durum olarak ele alınmalıdır. Buraya, çalışma süresi ve onlara yanıt vermek için uygun şekilde oluşabilecek hataları bazı kategoriye ayrılır.

  • Kullanım hataları. Kullanım Hatası, bir özel durum neden olabilir program mantığı içinde bir hata gösterir. Ancak, hata özel durumunun işlenmesini üzerinden değil, ancak hatalı kodu değiştirerek giderilmelidir. Örneğin, geçersiz kılma Object.Equals(Object) yöntemi aşağıdaki örnekte varsayar obj bağımsız değişkeni null olmayan her zaman olması gerekir.

    
    using System;
    
    public class Person
    {
       private string _name;
    
       public string Name 
       {
          get { return _name; } 
          set { _name = value; }
       }
    
       public override int GetHashCode()
       {
          return this.Name.GetHashCode();  
       }  
    
       public override bool Equals(object obj)
       {
          // This implementation contains an error in program logic:
          // It assumes that the obj argument is not null.
          Person p = (Person) obj;
          return this.Name.Equals(p.Name);
       }
    }
    
    public class Example
    {
       public static void Main()
       {
          Person p1 = new Person();
          p1.Name = "John";
          Person p2 = null; 
    
          // The following throws a NullReferenceException.
          Console.WriteLine("p1 = p2: {0}", p1.Equals(p2));   
       }
    }
    
    
    

    NullReferenceException Neden olan bir özel durum zaman obj olan null açıkça null çağırmadan önce sınamak için kaynak kodunu değiştirerek ortadan Object.Equals geçersiz kılma ve yeniden derlemek. Aşağıdaki örnek işler düzeltilmiş kaynak kodu içerir bir null bağımsız değişkeni.

    
    using System;
    
    public class Person
    {
       private string _name;
    
       public string Name 
       {
          get { return _name; } 
          set { _name = value; }
       }
    
       public override int GetHashCode()
       {
          return this.Name.GetHashCode();  
       }  
    
       public override bool Equals(object obj)
       {
           // This implementation handles a null obj argument.
           Person p = obj as Person; 
           if (p == null) 
              return false;
           else
              return this.Name.Equals(p.Name);
       }
    }
    
    public class Example
    {
       public static void Main()
       {
          Person p1 = new Person();
          p1.Name = "John";
          Person p2 = null; 
    
          Console.WriteLine("p1 = p2: {0}", p1.Equals(p2));   
       }
    }
    // The example displays the following output:
    //        p1 = p2: False
    
    
    

    Özel durum işleme için kullanım hataları kullanmak yerine, kullanabileceğiniz Debug.Assert hata ayıklama yapıları kullanım hataları tanımlamak için yöntem ve Trace.Assert hem hata ayıklama hem de yayın kullanım hataları belirlemek için bir yöntem oluşturur. Daha fazla bilgi için bkz. Yönetilen Koddaki Onaylar.

  • Program hataları. Bir program hatası mutlaka hata serbest kod yazarak kaçınılmaz bir çalışma zamanı hatası ' dir.

    Bazı durumlarda, bir program hatası beklenen veya rutin hata durumunu yansıtması. Bu durumda, program hata ile ilgilidir ve bunun yerine işlemi yeniden denemek için özel durum işleme kullanmaktan kaçının isteyebilirsiniz. Kullanıcı belirli bir biçimde bir tarih girişi için beklenen, örneğin, tarih dizesi arayarak ayrıştırabilirsiniz DateTime.TryParseExact döndüren yöntemi bir Boolean ayrıştırma işlemi, yerine başarılı olup olmadığını gösteren değeri DateTime.ParseExact atar yöntemi bir FormatException için tarih dizesi dönüştürülemezse, özel durum bir DateTime değer. Benzer şekilde, bir kullanıcı varolmayan bir dosyayı açmaya çalışırsa, ilk arayabileceğiniz File.Exists dosyası var, yoksa oluşturmak istediği olup olmadığını sorar olup olmadığını ve denetlemek için yöntem.

    Diğer durumlarda, bir program hatası kodunuzda ele beklenmeyen bir hata durumu yansıtır. Bir dosyanın var olduğundan emin olmak için iade olsa bile, örneğin, onu açmadan veya bozuk olabilir önce silinebilir. Bu durumda, oluşturarak dosyayı açmaya çalışırken bir StreamReader nesne veya arama Open yöntemi durum bir FileNotFoundException özel durum. Bu gibi durumlarda, özel durum işleme hatadan kurtarmak için kullanmanız gerekir.

  • Sistem hataları. Bir sistem hatası programlı olarak anlamlı bir şekilde işlenemiyor bir çalışma zamanı hatası ' dir. Örneğin, herhangi bir yöntemi atabilirsiniz bir OutOfMemoryException ortak dil çalışma zamanı ek bellek ayıramadığı için ise, özel durum. Normalde, sistem hataları özel durum işleme kullanarak işlemez. Bunun yerine, bir olay gibi kullanmak mümkün olabilir AppDomain.UnhandledException ve Environment.FailFast yöntemi özel durum bilgileri oturum ve uygulama kapatılmadan önce başarısızlık kullanıcıyı uyarır.

Try/catch bloğu

Ortak dil çalışma zamanı özel durumlar nesneler olarak gösterimi ve program kodu ve özel durum işleme kodu içine ayrımı esas alan bir özel durum işleme modelini sağlar try bloklar ve catch engeller. Bir veya daha fazla olabilir catch engeller, her özel durum veya bloğu başka bir blokla'den daha belirli bir özel durumu yakalamak üzere tasarlanmış belirli bir tür işlemek için tasarlanmış.

Bir uygulamayı bir uygulama kod bloğu yürütülmesi sırasında oluşan özel durumları işleme, kod içinde yerleştirilmesi gerekir bir try ifade denir bir try bloğu. Uygulama kodu tarafından oluşturulan özel durum işleme bir try blok içinde yerleştirilir bir catch ifade denir bir catch bloğu. Sıfır veya daha fazla catch taşları ile ilişkili bir try blok ve her catch blok, işleme özel durumları türlerini belirleyen bir tür filtresi içerir.

Aykırı durum oluştuğunda bir try blok, sistem arar ilişkili catch göründükleri uygulama kodunda onu bulana kadar sırayla engelleyen bir catch özel durum işleme bloğu. A catch blok türü bir özel durum işleme T Türü Filtresi catch bloğunun belirtiyorsa, T , yazın veya T türetir. Sistem durduğu ilk bulduktan sonra arama catch özel durum işleme bloğu. Bu nedenle, uygulama kodundaki bir catch bir tür işleme bloğu belirtilen, önce bir catch Bu bölümde aşağıdaki örnekte gösterildiği gibi temel türlerin işleme bloğu. İşler bir catch bloğu System.Exception son belirtilir.

Hiçbiri catch geçerli ile ilişkili blokları try özel durum ve geçerli blok ele try bloğu iç içe yerleştirilmesine try geçerli çağrısında engeller catch blokları sonraki kapsayan ile ilişkili try blok aranır. Hiç catch için özel durum bloğu bulunduğunda, sistem geçerli çağrısında önceki iç içe düzey arar. Hiç catch engellemek için özel durum geçerli çağrısında bulundu, özel çağrı yığını geçirilir ve önceki yığın çerçevesi için Aranan bir catch özel durum işleme bloğu. Çağrı yığını arama durum işleniyor olsa kadar veya daha fazla çerçeve üzerinde çağrı yığını var olana kadar devam eder. Çağrı yığını üstündeki bulma olmadan eriştiyseniz, bir catch varsayılan özel durum işleyici özel durum işleme bloğunu işler ve uygulama sonlanýr.

Özel durum türü özellikleri

Özel durum türü aşağıdaki özellikleri destekler:

  • Hatayı açıklayan metin okunabilir. Çalışma zamanı özel bir durum oluştuğunda, sorunu çözmek için bir metin iletisi hatanın yapısı kullanıcıyı bilgilendirmek ve eylem önermek için kullanılabilir hale getirir. Bu metin iletisi tutulur Message özel durum nesnenin özelliği. Özel durum nesnesi oluşturma sırasında bir metin dizesini başka belirli bir özel durum ayrıntıları açıklamak için yapıcısına iletebilirsiniz. Hiçbir hata iletisi bağımsız yapıcısına sağlanırsa, varsayılan hata iletisini kullanılır. Daha fazla bilgi için bkz. Message özelliği.

  • Özel durum oluşturuldu, çağrı yığını durumu. StackTrace Kod, hatanın oluştuğu belirlemek için kullanılan bir yığın izleme özelliği taşır. Yığın izleme çağrılan tüm yöntemleri ve çağrılar nereden yapılır kaynak dosyadaki satır numaralarını listeler.

Özel durum sınıfı özellikleri

Exception Sınıfı, bir dizi kod konumu, türü, Yardım dosyası ve özel durumun nedenini belirlemeye yardımcı özellikleri içerir: StackTrace, InnerException, Message, HelpLink, HResult, Source, TargetSite, ve Data.

İki veya daha fazla özel durumlar arasında nedensel bir ilişki varsa, InnerException özelliği, bu bilgileri korur. Dış özel yanıt olarak bu iç özel durum oluşturulur. Dış özel durum işleme kodu hata daha uygun bir şekilde işlemek için daha önce iç özel durum bilgileri kullanabilirsiniz. Özel durum hakkında tamamlayıcı bilgiler depolanmış anahtar/değer çiftleri olarak topluluğu olarak Data özelliği.

Oluşturucuya geçirilen özel durum nesnesi oluşturma sırasında hata ileti dizesi yerelleştirilmesi ve kaynak dosyadan kullanılarak sağlanabilir ResourceManager sınıf. Yerelleştirilmiş kaynaklar hakkında daha fazla bilgi için bkz: Masaüstü Uygulamaları için Uydu Derlemeleri Oluşturma ve Masaüstü Uygulamalarında Paketleme ve Dağıtma Kaynakları Konular.

Neden bir özel durum oluştu hakkında kapsamlı bilgiler ile kullanıcı sağlamak için HelpLink özelliği tutun URL (veya URN) bir Yardım dosyası.

Exception 0x80131500 değerine sahip HRESULT COR_E_EXCEPTION sınıfını kullanır.

Bir örneği için ilk özellik değerlerinin listesi için Exception sınıfında, bkz: Exception kurucusu.

Performans değerlendirmeleri

Oluşturma veya bir özel durum işleme sistem kaynakları ve çalışma zamanı önemli miktarda tüketir. Öngörülebilir olayları işlemek veya akış denetimi değil gerçekten olağanüstü koşulları, yalnızca işlemek için özel durumlar atar. Örneğin, ne zaman bir sınıf kitaplığı geliştirme yaptığınız bazı durumlarda, geçerli parametrelerle çağrılacak yöntemi, beklediğiniz için bir yöntem bağımsız değişkenleri geçersiz olursa, bir özel durum uygun olur. Bir kullanım hatası sonucu değil geçersiz yöntem bağımsız değişken, olağandışı oluştuğunu anlamına gelir. Kullanıcılar zaman zaman geçersiz veri girmek için beklediğiniz çünkü kullanıcı giriş geçersizse, buna karşılık, bir özel durum değildir. Bunun yerine, kullanıcıların geçerli giriş girebilmeniz için Yeniden Dene'yi mekanizma sağlar. Ne de kullanım hataları işlemek için özel durumları kullanmanız gerekir. Bunun yerine, onayları tanımlamak ve kullanım hatalarını düzeltmek için.

Dönüş kodu yeterli olduğunda ek olarak, bir özel durum değil; Dönüş kodu, özel bir dönüştürme işlemini; catch istisna değil düzenli olarak yapın, yoksayabilir ve işleme devam edin.

Standart özel durumlar seçme

Bir özel durum varsa, genellikle .NET Framework bir özel durum uygulamak yerine varolan bir özel durum türünü kullanabilirsiniz. Bu iki koşullar altında bir standart özel durum türünü kullanmanız gerekir:

  • Bir kullanım hatası nedeniyle özel durum yaratmakta (diğer bir deyişle, program mantığı, yöntemi çağıran bir geliştirici tarafından yapılan bir hata). Genellikle, bir özel gibi durum ArgumentException, ArgumentNullException, InvalidOperationException, veya NotSupportedException. Böylece Geliştirici Düzelt, özel durum nesnesi oluşturmak hata açıklaması gerekir, istisna nesnesinin yapıcısına sağladığınız dizeyi. Daha fazla bilgi için bkz. Message özelliği.

  • Varolan .NET Framework istisnayla çağırana iletilen bir hata işleme. Olası en çok türetilen özel durum oluşturması gerekir. Örneğin, bir yöntem bağımsız değişken bir numaralandırma türü geçerli bir üyesi olmasını gerektiriyorsa, oluşturması gerekir bir InvalidEnumArgumentException (en türetilmiş sınıf) yerine bir ArgumentException.

Özel durum uygulama

Aşağıdaki durumlarda, bir hata koşulu işlemek için varolan .NET Framework istisna kullanarak yeterli değil:

  • Ne zaman özel durum varolan .NET Framework istisna eşlenen bir benzersiz program hatası yansıtır.

  • Ne zaman özel durum işleme, varolan .NET Framework istisna veya özel durum için uygun işleme farklıdır gerektiren benzer bir özel durumu disambiguated gerekir. Örneğin, durum, bir ArgumentOutOfRangeException hedef tamsayı türü aralık dışında bir dize sayısal gösterimini ayrıştırılırken özel değil yöntemi çağrılırken sonuçlar sağlayan uygun değil çağrıyı yapandan kısıtlı bir hata değerler için aynı özel durum kullanmak istediğiniz.

Exception Tüm özel durumlar .NET Framework temel sınıf sınıftır. Birçok türetilen sınıflardan devralınan davranışı üyeleri kullanan Exception sınıf; üyeleri geçersiz Exception, ne de herhangi bir benzersiz üye tanımlayın yapın.

Kendi özel durum sınıfını tanımlamak için:

  1. Devralan bir sınıf tanımlayın Exception. Gerekirse, sınıfınız tarafından özel durum hakkında ek bilgi sağlamak için gerekli olan herhangi bir benzersiz üye tanımlayın. Örneğin, ArgumentException sınıfını içerir bir ParamName , bağımsız değişken neden oldu, parametrenin adını belirten özellik ve RegexMatchTimeoutException özelliği içeren bir MatchTimeout zaman aşımı aralığını gösteren özellik.

  2. Gerekirse, işlevselliği değiştirmek veya değiştirmek istediğiniz tüm devralınan üyeleri geçersiz kılın. Çoğu varolan sınıflardan türetilen Not Exception devralınan üyeleri davranışını geçersiz kılmaz.

  3. Özel durum nesne seri hale getirilebilir olup olmadığını belirleyin. Özel durum hakkında bilgi kaydetmenize olanak sağlar ve bir sunucu ve istemci proxy tarafından uzak içerikte paylaşılmak üzere özel durum bilgileri verir. Özel durum nesnesi seri hale getirilebilir yapmak için onunla işaretle SerializableAttribute özniteliği.

  4. Özel durum sınıfı kurucuları tanımlayın. Genellikle, bir veya daha aşağıdaki oluşturucular istisna sınıfları vardır:

    • Exception() , yeni bir özel durum nesnesi özelliklerini başlatmak için varsayılan değerleri kullanır.

    • Exception(String) , belirtilen hata iletisi ile yeni bir özel durum nesnesi başlatır.

    • Exception(String, Exception) , bir belirtilen hata iletisi ve iç özel durum dışında yeni bir özel durum nesnesi başlatır.

    • Exception(SerializationInfo, StreamingContext) , olduğu bir protected gelen yeni bir özel durum nesnesi başlatır yapıcı seri veri. Bu oluşturucu özel durum nesnesi seri hale getirilebilir yapmayı seçtiyseniz uygulamalısınız.

Aşağıdaki örnek, bir özel durum sınıfı kullanımını göstermektedir. Onu tanımlayan bir NotPrimeException istemci prime kullanılmayan bir başlangıç numarası belirterek bir dizi asal sayı almaya çalıştığında, durum oluşturulduktan özel durum. Özel yeni bir özelliği tanımlayan NonPrime, olmayan asal özel durumun oluşmasına neden numarası verir. Korumalı bir parametresiz oluşturucusu ve bir kurucu uygulama yanı sıra SerializationInfo ve StreamingContext parametrelerini seri hale getirme, NotPrimeException sınıfını tanımlar desteklemek için üç ek kurucular NonPrime özelliği. Temel sınıf kurucusunu olmayan-asal sayısı değeri koruma yanı sıra her yapıcısını çağırır. NotPrimeException Sınıf ile işaretlenmiş de SerializableAttribute özniteliği.


using System;
using System.Runtime.Serialization;

[Serializable()]
public class NotPrimeException : Exception
{
   private int notAPrime;

   protected NotPrimeException()
      : base()
   { }

   public NotPrimeException(int value) :
      base(String.Format("{0} is not a prime number.", value))
   {
      notAPrime = value;
   }

   public NotPrimeException(int value, string message)
      : base(message)
   {
      notAPrime = value;
   }

   public NotPrimeException(int value, string message, Exception innerException) :
      base(message, innerException)
   {
      notAPrime = value;
   }

   protected NotPrimeException(SerializationInfo info,
                               StreamingContext context)
      : base(info, context)
   { }

   public int NonPrime
   { get { return notAPrime; } }
}


PrimeNumberGenerator Sınıfı aşağıdaki örnekte gösterildiği Sieve Eratosthenes, kendi sınıf oluşturucu çağrısı istemci tarafından belirtilen sınıra 2 asal sayıların sırasını hesaplamak için kullanır. GetPrimesFrom Yöntemi, belirtilen alt sınıra eşit veya daha büyük olan asal sayılar verir, ancak atar bir NotPrimeException , alt sınır bir asal sayı değilse.


using System;
using System.Collections.Generic;


[Serializable]
public class PrimeNumberGenerator
{
   private const int START = 2;
   private int maxUpperBound = 10000000;
   private int upperBound;
   private bool[] primeTable;
   private List<int> primes = new List<int>();

   public PrimeNumberGenerator(int upperBound)
   {
      if (upperBound > maxUpperBound)
      {
         string message = String.Format(
                           "{0} exceeds the maximum upper bound of {1}.",
                           upperBound, maxUpperBound);
         throw new ArgumentOutOfRangeException(message);
      }
      this.upperBound = upperBound;
      // Create array and mark 0, 1 as not prime (True).
      primeTable = new bool[upperBound + 1];
      primeTable[0] = true;
      primeTable[1] = true;

      // Use Sieve of Eratosthenes to determine prime numbers.
      for (int ctr = START; ctr <= (int)Math.Ceiling(Math.Sqrt(upperBound));
            ctr++)
      {
         if (primeTable[ctr]) continue;

         for (int multiplier = ctr; multiplier <= upperBound / ctr; multiplier++)
            if (ctr * multiplier <= upperBound) primeTable[ctr * multiplier] = true;
      }
      // Populate array with prime number information.
      int index = START;
      while (index != -1)
      {
         index = Array.FindIndex(primeTable, index, (flag) => !flag);
         if (index >= 1)
         {
            primes.Add(index);
            index++;
         }
      }
   }

   public int[] GetAllPrimes()
   {
      return primes.ToArray();
   }

   public int[] GetPrimesFrom(int prime)
   {
      int start = primes.FindIndex((value) => value == prime);
      if (start < 0)
         throw new NotPrimeException(prime, String.Format("{0} is not a prime number.", prime));
      else
         return primes.FindAll((value) => value >= prime).ToArray();
   }
}


Aşağıdaki örnek iki çağrılar GetPrimesFrom yöntemi ile olmayan-asal sayıların, bunlardan biri kesiştiği uygulama etki alanı sınırları. Her iki durumda da, özel durum oluşturulur ve istemci kodu başarıyla işlendi.


using System;
using System.Reflection;

class Example
{
   public static void Main()
   {
      int limit = 10000000;
      PrimeNumberGenerator primes = new PrimeNumberGenerator(limit);
      int start = 1000001;
      try
      {
         int[] values = primes.GetPrimesFrom(start);
         Console.WriteLine("There are {0} prime numbers from {1} to {2}",
                           start, limit);
      }
      catch (NotPrimeException e)
      {
         Console.WriteLine("{0} is not prime", e.NonPrime);
         Console.WriteLine(e);
         Console.WriteLine("--------");
      }

      AppDomain domain = AppDomain.CreateDomain("Domain2");
      PrimeNumberGenerator gen = (PrimeNumberGenerator)domain.CreateInstanceAndUnwrap(
                                        typeof(Example).Assembly.FullName,
                                        "PrimeNumberGenerator", true,
                                        BindingFlags.Default, null,
                                        new object[] { 1000000 }, null, null);
      try
      {
         start = 100;
         Console.WriteLine(gen.GetPrimesFrom(start));
      }
      catch (NotPrimeException e)
      {
         Console.WriteLine("{0} is not prime", e.NonPrime);
         Console.WriteLine(e);
         Console.WriteLine("--------");
      }
   }
}


Windows çalışma zamanı ve.NET Framework 4.5.1

İçinde Windows Mağazası uygulamaları için .NET için Windows 8, istisna .NET Framework yığın çerçeveler boyunca yayılır, bazı özel durum bilgileri genellikle kaybolur. Başlayarak .NET Framework 4.5.1 ve Windows 8.1, ortak dil çalışma zamanı özgün kullanmaya devam eder Exception bu özel bir .NET Framework yığın çerçevesinde değiştirilmediyse oluşturuldu nesne.

Aşağıdaki örnekte gösterilmiştir bir catch işlemek için tanımlanmış blok ArithmeticException hataları. Bu catch engellemek de önbellek DivideByZeroException hataları, çünkü DivideByZeroException türetilen ArithmeticException ve hiç catch için açıkça tanımlanmış blok DivideByZeroException hataları.


using System;

class ExceptionTestClass 
{
   public static void Main() 
   {
      int x = 0;
      try 
      {
         int y = 100/x;
      }
         catch (ArithmeticException e) 
         {
            Console.WriteLine("ArithmeticException Handler: {0}", e.ToString());
         }
         catch (Exception e) 
         {
            Console.WriteLine("Generic Exception Handler: {0}", e.ToString());
         }
   }	
}
/*
This code example produces the following results:

ArithmeticException Handler: System.DivideByZeroException: Attempted to divide by zero.
   at ExceptionTestClass.Main()

*/


.NET Framework

Destekleyen: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework İstemci Profili

Destekleyen: 4, 3.5 SP1

Taşınabilir Sınıf Kitaplığı

Destekleyen: Taşınabilir Sınıf Kitaplığı

Windows Mağazası uygulamaları için .NET

Destekleyen: Windows 8

Windows Phone uygulamaları için .NET

Destekleyen: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Sunucu Çekirdeği Rolü desteklenmez), Windows Server 2008 R2 (Sunucu Çekirdeği Rolü, SP1 veya sonraki sürümlerle desteklenir; Itanium'da desteklenmez)

.NET Framework her platformun tüm sürümlerini desteklemez. Desteklenen sürümlerin listesi için bkz. .NET Framework Sistem Gereksinimleri.

Bu türün tüm genel statik (Visual Basic'te Shared) üyeleri iş parçacığı açısından güvenlidir. Hiçbir örnek üyesinin iş parçacığı açısından güvenliği garanti edilemez.

System.Object
  System.Exception
    Microsoft.Build.BuildEngine.InternalLoggerException
    Microsoft.Build.BuildEngine.InvalidProjectFileException
    Microsoft.Build.BuildEngine.InvalidToolsetDefinitionException
    Microsoft.Build.BuildEngine.RemoteErrorException
    Microsoft.Build.Exceptions.BuildAbortedException
    Microsoft.Build.Exceptions.InternalLoggerException
    Microsoft.Build.Exceptions.InvalidProjectFileException
    Microsoft.Build.Exceptions.InvalidToolsetDefinitionException
    Microsoft.Build.Framework.LoggerException
    Microsoft.CSharp.RuntimeBinder.RuntimeBinderException
    Microsoft.CSharp.RuntimeBinder.RuntimeBinderInternalCompilerException
    Microsoft.JScript.CmdLineException
    Microsoft.JScript.ParserException
    Microsoft.VisualBasic.ApplicationServices.CantStartSingleInstanceException
    Microsoft.VisualBasic.ApplicationServices.NoStartupFormException
    Microsoft.VisualBasic.Compatibility.VB6.WebClassContainingClassNotOptional
    Microsoft.VisualBasic.Compatibility.VB6.WebClassCouldNotFindEvent
    Microsoft.VisualBasic.Compatibility.VB6.WebClassNextItemCannotBeCurrentWebItem
    Microsoft.VisualBasic.Compatibility.VB6.WebClassNextItemRespondNotFound
    Microsoft.VisualBasic.Compatibility.VB6.WebClassUserWebClassNameNotOptional
    Microsoft.VisualBasic.Compatibility.VB6.WebClassWebClassFileNameNotOptional
    Microsoft.VisualBasic.Compatibility.VB6.WebClassWebItemNotValid
    Microsoft.VisualBasic.Compatibility.VB6.WebItemAssociatedWebClassNotOptional
    Microsoft.VisualBasic.Compatibility.VB6.WebItemClosingTagNotFound
    Microsoft.VisualBasic.Compatibility.VB6.WebItemCouldNotLoadEmbeddedResource
    Microsoft.VisualBasic.Compatibility.VB6.WebItemCouldNotLoadTemplateFile
    Microsoft.VisualBasic.Compatibility.VB6.WebItemNameNotOptional
    Microsoft.VisualBasic.Compatibility.VB6.WebItemNoTemplateSpecified
    Microsoft.VisualBasic.Compatibility.VB6.WebItemTooManyNestedTags
    Microsoft.VisualBasic.Compatibility.VB6.WebItemUnexpectedErrorReadingTemplateFile
    Microsoft.VisualBasic.CompilerServices.IncompleteInitialization
    Microsoft.VisualBasic.CompilerServices.InternalErrorException
    Microsoft.VisualBasic.FileIO.MalformedLineException
    System.Activities.DynamicUpdate.InstanceUpdateException
    System.Activities.ExpressionParser.SourceExpressionException
    System.Activities.Expressions.LambdaSerializationException
    System.Activities.InvalidWorkflowException
    System.Activities.Presentation.Metadata.AttributeTableValidationException
    System.Activities.Statements.WorkflowTerminatedException
    System.Activities.VersionMismatchException
    System.Activities.WorkflowApplicationException
    System.AddIn.Hosting.AddInSegmentDirectoryNotFoundException
    System.AddIn.Hosting.InvalidPipelineStoreException
    System.AggregateException
    System.ApplicationException
    System.ComponentModel.Composition.CompositionContractMismatchException
    System.ComponentModel.Composition.CompositionException
    System.ComponentModel.Composition.ImportCardinalityMismatchException
    System.ComponentModel.Composition.Primitives.ComposablePartException
    System.ComponentModel.DataAnnotations.ValidationException
    System.ComponentModel.Design.ExceptionCollection
    System.Configuration.Provider.ProviderException
    System.Configuration.SettingsPropertyIsReadOnlyException
    System.Configuration.SettingsPropertyNotFoundException
    System.Configuration.SettingsPropertyWrongTypeException
    System.Data.Linq.ChangeConflictException
    System.Diagnostics.Eventing.Reader.EventLogException
    System.Diagnostics.Tracing.EventSourceException
    System.DirectoryServices.ActiveDirectory.ActiveDirectoryObjectExistsException
    System.DirectoryServices.ActiveDirectory.ActiveDirectoryObjectNotFoundException
    System.DirectoryServices.ActiveDirectory.ActiveDirectoryOperationException
    System.DirectoryServices.ActiveDirectory.ActiveDirectoryServerDownException
    System.DirectoryServices.Protocols.DirectoryException
    System.IdentityModel.AsynchronousOperationException
    System.IdentityModel.Metadata.MetadataSerializationException
    System.IdentityModel.Protocols.WSTrust.WSTrustSerializationException
    System.IdentityModel.RequestException
    System.IdentityModel.Selectors.CardSpaceException
    System.IdentityModel.Selectors.IdentityValidationException
    System.IdentityModel.Selectors.PolicyValidationException
    System.IdentityModel.Selectors.ServiceBusyException
    System.IdentityModel.Selectors.ServiceNotStartedException
    System.IdentityModel.Selectors.StsCommunicationException
    System.IdentityModel.Selectors.UnsupportedPolicyOptionsException
    System.IdentityModel.Selectors.UntrustedRecipientException
    System.IdentityModel.Selectors.UserCancellationException
    System.IdentityModel.Services.AsynchronousOperationException
    System.IdentityModel.Services.FederatedAuthenticationSessionEndingException
    System.IdentityModel.Services.FederationException
    System.IdentityModel.Services.WSFederationMessageException
    System.InvalidTimeZoneException
    System.IO.IsolatedStorage.IsolatedStorageException
    System.IO.Log.SequenceFullException
    System.Management.Instrumentation.InstrumentationBaseException
    System.Management.Instrumentation.WmiProviderInstallationException
    System.Net.Http.HttpRequestException
    System.Net.Mail.SmtpException
    System.Net.PeerToPeer.PeerToPeerException
    System.Runtime.CompilerServices.RuntimeWrappedException
    System.Runtime.DurableInstancing.InstancePersistenceException
    System.Runtime.Remoting.MetadataServices.SUDSGeneratorException
    System.Runtime.Remoting.MetadataServices.SUDSParserException
    System.Runtime.Serialization.InvalidDataContractException
    System.Security.RightsManagement.RightsManagementException
    System.ServiceModel.Channels.InvalidChannelBindingException
    System.SystemException
    System.Threading.BarrierPostPhaseException
    System.Threading.LockRecursionException
    System.Threading.Tasks.TaskSchedulerException
    System.TimeZoneNotFoundException
    System.Web.Query.Dynamic.ParseException
    System.Web.Security.MembershipCreateUserException
    System.Web.Security.MembershipPasswordException
    System.Web.UI.ViewStateException
    System.Web.UI.WebControls.EntityDataSourceValidationException
    System.Web.UI.WebControls.LinqDataSourceValidationException
    System.Windows.Automation.NoClickablePointException
    System.Windows.Automation.ProxyAssemblyNotLoadedException
    System.Windows.Controls.PrintDialogException
    System.Windows.Forms.AxHost.InvalidActiveXStateException
    System.Windows.Xps.XpsException
    System.Windows.Xps.XpsWriterException
    System.Workflow.Activities.Rules.RuleException
    System.Workflow.ComponentModel.Compiler.WorkflowValidationFailedException
    System.Workflow.ComponentModel.Serialization.WorkflowMarkupSerializationException
    System.Workflow.ComponentModel.WorkflowTerminatedException
    System.Workflow.Runtime.WorkflowOwnershipException
    System.Xaml.XamlException

Topluluk İçeriği

Ekle
Show:
© 2014 Microsoft