Bu makale, makine tarafından çevrilmiştir. Makaleyi İngilizce dilinde görüntülemek için İngilizce onay kutusunu işaretleyin. Ayrıca, fare işaretçisiyle İngilizce metnin üzerine gelerek metni açılır pencerede de görüntüleyebilirsiniz.
Çeviri
İngilizce

Exception Sınıfı

 

Uygulama yürütme sırasında oluşan hataları temsil eder.

Bu tür için .NET Framework kaynak koda göz atmak için bkz: Reference Source.

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

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

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

AdıAçıklama
System_CAPS_pubmethodException()

Yeni bir örneğini başlatır Exception sınıfı.

System_CAPS_protmethodException(SerializationInfo, StreamingContext)

Yeni bir örneğini başlatır Exception serileştirilmiş verilerle sınıfı.

System_CAPS_pubmethodException(String)

Yeni bir örneğini başlatır Exception belirtilen hata iletisiyle sınıfı.

System_CAPS_pubmethodException(String, Exception)

Yeni bir örneğini başlatır Exception belirtilen hata iletisini ve bu özel durumun nedeni olan iç özel duruma başvuru sınıfı.

AdıAçıklama
System_CAPS_pubpropertyData

Ek kullanıcı tanımlı özel durumla ilgili bilgiler anahtar/değer çiftleri koleksiyonu alır.

System_CAPS_pubpropertyHelpLink

Alır veya bu özel durumla ilişkili Yardım dosyası için bir bağlantı ayarlar.

System_CAPS_pubpropertyHResult

Alır veya ayarlar HRESULT, belirli bir özel durum atanan kodlanmış bir sayısal değer.

System_CAPS_pubpropertyInnerException

Alır Exception geçerli özel duruma neden örneği.

System_CAPS_pubpropertyMessage

Geçerli özel durumu açıklayan bir ileti alır.

System_CAPS_pubpropertySource

Alır veya uygulama veya hataya neden nesnesinin adını ayarlar.

System_CAPS_pubpropertyStackTrace

Çağrı yığınındaki hemen çerçeveler dize gösterimini alır.

System_CAPS_pubpropertyTargetSite

Geçerli özel durum oluşturur yöntemi alır.

AdıAçıklama
System_CAPS_pubmethodEquals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Object kaynağından devralındı.)

System_CAPS_protmethodFinalize()

Atık toplama işlemi tarafından alınmadan önce nesnenin kaynaklarını boşaltmayı denemesine izin verir. (Object kaynağından devralındı.)

System_CAPS_pubmethodGetBaseException()

Türetilen bir sınıfta geçersiz kılındığında, döndürür Exception olan bir veya daha fazla sonraki özel durumları temel nedenini.

System_CAPS_pubmethodGetHashCode()

Varsayılan karma işlevi olarak görev yapar.(Object kaynağından devralındı.)

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

Türetilen bir sınıfta geçersiz kılındığında, ayarlar SerializationInfo özel durum hakkında bilgi.

System_CAPS_pubmethodGetType()

Çalışma zamanı türü geçerli örneğini alır.

System_CAPS_protmethodMemberwiseClone()

Geçerli basit bir kopyasını oluşturur Object.(Object kaynağından devralındı.)

System_CAPS_pubmethodToString()

Oluşturur ve geçerli özel durumun dize gösterimini döndürür.(Object.ToString() geçersiz kılar.)

AdıAçıklama
System_CAPS_proteventSerializeObjectState

Bir özel durum seri içeren bir özel durum nesnesi oluşturmak için veri özel durumla ilgili serileştirilmiş oluşur.

System_CAPS_noteNot

Bu tür için .NET Framework kaynak kodunu görüntülemek için bkz: Reference Source. Kaynak kodda Çevrimiçi Gözat, çevrimdışı izleme için başvuru indirmek ve hata ayıklama sırasında (düzeltme eklerinin ve güncelleştirmeleri dahil) kaynakları aracılığıyla adım; see instructions.

Bu sınıf, tüm özel durumlar için temel sınıftır. Bir hata oluştuğunda, sistem veya o anda yürütülen uygulamasına bu hata hakkında bilgi içeren bir özel durum atma tarafından raporlar. 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 blokları
Özel durum türü özellikleri
Özel durum sınıfı özellikleri
Başarım Değerlendirmeleri
Bir özel durum yeniden atma
Standart özel durumlar seçme
Özel durum uygulama

Çalışma zamanı hataları çeşitli nedenlerden dolayı ortaya çıkabilir. Ancak, tüm hataları, kodunuzdaki özel durumlar olarak ele alınmalıdır. İşte bazı kategorilerini çalıştırma ve bunlara yanıt vermek için uygun şekilde oluşabilecek hataları.

  • Kullanım hataları. Kullanım Hatası hatayla bir özel durum ortaya çıkabilecek program mantığı temsil eder. Ancak, hata özel durum işleme üzerinden değil ancak hatalı kodu değiştirerek çözülmelidir. Ö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 Sonuçları özel durum olduğunda 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 derleme. Aşağıdaki örnek işleyen düzeltilmiş kaynak kodu içeren 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 kullanabilirsiniz Debug.Assert kullanım hatalar hata ayıklama yapıları tanımlamak için yöntem ve Trace.Assert hata ayıklama ve yayın kullanım hataları belirlemek için yöntemi oluşturur. Daha fazla bilgi için bkz: Yönetilen Koddaki Onaylar.

  • Program hataları. Bir program hatası mutlaka hata serbest kod yazarak depolanması önlenemez bir çalışma zamanı hatasıdır.

    Bazı durumlarda, bir program hatası beklenen veya rutin hata durumunu yansıtır. Bu durumda, bunun yerine işlemi yeniden deneyin ve program hatası ile mücadele etmek için özel durum işleme kullanmaktan kaçının isteyebilirsiniz. Kullanıcı belirli bir biçimde bir tarih girin bekleniyorsa, örneğin, tarih dizesi çağırarak ayrıştırabilir DateTime.TryParseExact döndüren yöntemi bir Boolean ayrıştırma işlemi, kullanmak yerine başarılı olup olmadığını gösteren değeri DateTime.ParseExact oluşturur yöntemi, bir FormatException tarih dizesi için dönüştürülemiyorsa özel bir DateTime değeri. Benzer şekilde, bir kullanıcı var olmayan bir dosyayı açmaya çalışırsa, ilk çağırabilirsiniz File.Exists dosyanın var olduğundan ve onu yoksa oluşturun istediği olup olmadığını kullanıcıdan olup olmadığını, denetlemek için yöntemi.

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

  • Sistem hatası. Program aracılığıyla anlamlı bir şekilde işlenemez bir çalışma zamanı hatası sistem hatasıdır. Örneğin, herhangi bir yöntem oluşturabilecek bir OutOfMemoryException ortak dil çalışma zamanı ek bellek ayıramıyor ise özel durum. Normalde, sistem hatası özel durum işlemeyi kullanarak işlenmez. Bunun yerine, bir olay gibi kullanmanız mümkün olabilir AppDomain.UnhandledException ve arama Environment.FailFast yöntemi özel durum bilgilerini günlüğe kaydetme ve uygulama kapatılmadan önce hata kullanıcıyı uyarır.

Ortak dil çalışma zamanı özel durumlar olarak nesneleri gösterimini ve program kodu ve özel durum işleme koda ayrımını temel alan bir özel durum işleme modeli sağlar try blokları ve catch engeller. Bir veya daha fazla olabilir catch engeller, her belirli bir özel durum veya başka bir blok daha fazla belirli bir özel durumu yakalamak için tasarlanmış bir blok türü işlemek için tasarlanmıştır.

İçinde bir uygulamanın uygulama bir kod bloğunu yürütülmesi sırasında oluşan özel durumları işler, kod yerleştirilmelidir bir try deyimi ve çağrılan bir try bloğu. Uygulama kodu tarafından oluşturulan özel durumları işler bir try blok içinde yerleştirilir bir catch deyimi ve çağrılan bir catch bloğu. Sıfır veya daha fazla catch blokları ile ilişkili bir try bloğu ve her catch bloğu tür özel durumlar, işleme belirleyen bir tür filtresi içerir.

Bir özel durum oluştuğunda bir try bloğu, sistem ilişkili arar catch göründükleri uygulama kodundaki bulmadığı kadar sırayla engelleyen bir catch özel durumu işler blok. A catch bloğu türünde bir özel durum işleme T catch bloğunun türü filtresi belirtiyorsa T veya herhangi bir türü T öğesinden türer. Sistem durdurur bulduğu ilk sonra arama catch bloğu özel durumu işler. Bu nedenle, uygulama kodundaki bir catch bir tür işleme bloğu belirtilen, önce bir catch temel türlerin, bu bölümde aşağıdaki örnekte gösterildiği gibi işler blok. İşleyen bir catch bloğu System.Exception Son belirtilir.

Hiçbiri catch blokları geçerli ile ilişkili try bloğu özel durumu ve geçerli işleme try bloğu iç içe try Geçerli çağrısında engeller catch sonraki kapsayan ile ilişkili blokları try bloğu arama yapılır. Hiçbir catch için özel durum bloğu bulunursa, sistem önceki iç içe geçme düzeyini geçerli çağrısında arar. Hiçbir catch engellemek için özel durum geçerli çağrıda bulunan, özel durum çağrı yığınına geçirilir ve önceki yığın çerçevesi için aranacak bir catch bloğu özel durumu işler. Çağrı yığını arama özel durumun işlenip kadar veya daha fazla çerçeve çağrı yığınındaki mevcut kadar devam eder. Çağrı yığını üst olmadan bulma ulaşılırsa bir catch varsayılan özel durum işleyicisi özel durumu işleyen bloğu işler ve uygulama sonlandırır.

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

  • Hatayı açıklayan, kullanıcı tarafından okunabilen metin. Çalışma zamanı özel durum oluştuğunda, sorunu çözmek için bir kısa mesaj hata yapısını kullanıcıya bildirmek için ve eylem önermek için kullanılabilir hale getirir. Bu metin iletisi tutulur Message özelliğini özel durum nesnesi. Özel durum nesnesi oluşturma sırasında oluşturucuya o belirli özel durum ayrıntıları açıklamak için bir metin dizesi geçirebilirsiniz. Oluşturucuya hiçbir hata iletisi bağımsız değişken sağlanmazsa, varsayılan hata iletisini kullanılır. Daha fazla bilgi için bkz: Message özelliği.

  • Özel durum oluştuğunda çağrı yığınını durumu. StackTrace Özelliği burada kodda hata oluştuğunu belirlemek için kullanılan bir yığın izleme taşır. Yığın izleme çağrılan tüm yöntemleri ve burada çağrıları yapılan kaynak dosyadaki satır numaralarını listeler.

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

İki veya daha fazla özel durumları arasında nedensel bir ilişki var olduğunda InnerException özelliği bu bilgileri tutar. Dış özel yanıt için bu iç özel durum oluşturulur. Dış özel durumu işleyen kodu hata daha uygun şekilde işlemek için daha önce iç özel duruma bulunan bilgileri kullanabilirsiniz. Özel durum hakkında ek bilgi anahtar/değer çiftleri koleksiyonu olarak depolanabilir Data özelliği.

Oluşturucuya geçirilen özel durum nesnesi oluşturma sırasında hata iletisi dizesi yerelleştirilmiş olmalıdır ve bir kaynak dosyasından 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ı.

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

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

Bir örneği için başlangıç özellik değerlerini bir listesi için Exception sınıfı için bkz: Exception Oluşturucular.

Sistem kaynakları ve yürütme zamanı önemli ölçüde atma veya bir özel durum işleme tüketir. Tahmin edilebilir olayları işlemek veya akış denetimi değil gerçekten olağandışı koşulları, yalnızca işlemek için özel durum oluşturun. Örneğin, ne zaman, bir sınıf kitaplığı, geliştirmekte olduğunuz gibi bazı durumlarda, bu, geçerli parametrelerle çağrılacak yönteminize beklediğiniz için bir yöntem bağımsız değişkeni geçersiz bir özel durum makul olur. Bir kullanım hatasına sonucu değilse, geçersiz bir yöntem bağımsız değişken olağandışı oluştuğunu anlamına gelir. Geçersiz veri bazen girmesini beklediğiniz için kullanıcı girişi geçersiz, buna karşılık, bir özel durum değil. Bunun yerine, kullanıcıların geçerli giriş girmesi için bir yeniden deneme mekanizması sağlar. Bunların kullanım hatalarını işlemek için özel durumlar kullanmanız gerekir. Bunun yerine, onaylar tanımlamak ve kullanım hataları düzeltin.

Dönüş kodu yeterli olduğunda ek olarak, bir özel durum değil; Dönüş kodu için bir özel durum dönüştürmez; ve düzenli olarak değil bir özel durum catch yapmak yoksayabilir ve sonra işleme devam edin.

Çoğu durumda, özel durum işleyicisi özel durumu çağıran açın geçirmek basitçe istiyor. Bu en sık oluşuyor:

  • .NET Framework sınıf kitaplığı veya diğer sınıf kitaplıkları yöntemlerine sırayla sarmalayan bir sınıf kitaplığı.

  • Bir uygulama veya kritik bir özel durumla karşılaştığında kitaplığı. Özel durum işleyici, özel durum oturum ve ardından özel durumu yeniden oluşturmak.

Bir özel durumu yeniden oluşturmak için önerilen yöntem yalnızca kullanmaktır throw C# deyimi ve Throw olmadan bir ifade dahil olmak üzere Visual Basic'te deyimi. Bu özel durumun çağırana yayıldığında tüm çağrı yığını bilgileri korunur sağlar. Aşağıdaki örnek bunu göstermektedir. Bir dize genişletme yöntemi FindOccurrences, bir veya daha fazla çağrıları sarar String.IndexOf(String, Int32) bağımsız değişkenlerini önceden doğrulama olmadan.

using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;

public static class Library
{
   public static int[] FindOccurrences(this String s, String f)
   {
      var indexes = new List<int>();
      int currentIndex = 0;
      try {
         while (currentIndex >= 0 && currentIndex < s.Length) {
            currentIndex = s.IndexOf(f, currentIndex);
            if (currentIndex >= 0) {
               indexes.Add(currentIndex);
               currentIndex++;
            }
         }
      }
      catch (ArgumentNullException e) {
         // Perform some action here, such as logging this exception.

         throw;
      }
      return indexes.ToArray();
   }
}

Çağıran sonra çağırır FindOccurrences iki kez. İkinci çağrısında FindOccurrences, arayan geçişleri bir null hangi durumlarda arama dizesi olarak String.IndexOf(String, Int32) yöntemi oluşturmak için bir ArgumentNullException özel durum. Bu özel durum tarafından ele FindOccurrences yöntemi ve geçirilen geri çağırana. Throw deyimi ile hiçbir ifade kullanıldığından, çağrı yığını korunur örnek çıktısını gösterir.

public class Example
{
   public static void Main()
   {
      String s = "It was a cold day when...";
      int[] indexes = s.FindOccurrences("a");
      ShowOccurrences(s, "a", indexes);
      Console.WriteLine();

      String toFind = null;
      try {
         indexes = s.FindOccurrences(toFind);
         ShowOccurrences(s, toFind, indexes);
      }
      catch (ArgumentNullException e) {
         Console.WriteLine("An exception ({0}) occurred.",
                           e.GetType().Name);
         Console.WriteLine("Message:\n   {0}\n", e.Message);
         Console.WriteLine("Stack Trace:\n   {0}\n", e.StackTrace);
      }
   }

   private static void ShowOccurrences(String s, String toFind, int[] indexes)
   {
      Console.Write("'{0}' occurs at the following character positions: ",
                    toFind);
      for (int ctr = 0; ctr < indexes.Length; ctr++)
         Console.Write("{0}{1}", indexes[ctr],
                       ctr == indexes.Length - 1 ? "" : ", ");

      Console.WriteLine();
   }
}
// The example displays the following output:
//    'a' occurs at the following character positions: 4, 7, 15
//
//    An exception (ArgumentNullException) occurred.
//    Message:
//       Value cannot be null.
//    Parameter name: value
//
//    Stack Trace:
//          at System.String.IndexOf(String value, Int32 startIndex, Int32 count, Stri
//    ngComparison comparisonType)
//       at Library.FindOccurrences(String s, String f)
//       at Example.Main()

Buna karşılık, özel durum kullanarak yeniden oluşursa

throw e

deyimi, tam çağrı yığınını korunmaz ve örnek aşağıdaki çıktıyı üretir:

'bir' oluşur aşağıdaki karakter konumlarını: 4, 7, 15 (ArgumentNullException) özel durum oluştu. İleti: Değer boş olamaz. Parametre adı: değer yığın izleme: Example.Main() konumunda Library.FindOccurrences (dize s, dize f) konumunda

Yeni bir özel durum oluşturmak için ve bir iç özel durum çağrı yığını bilgileri özgün özel durumun korumak için biraz daha kullanışsız bir alternatif alır. Çağıran yeni özel durumun daha sonra kullanabilirsiniz InnerException yığın çerçevesi ve özgün özel durum hakkında diğer bilgileri almak için özellik. Bu durumda, throw ifadesi şöyledir:

throw new ArgumentNullException("You must supply a search string.",
                                e);

Özel durum işleme kullanıcı kodu bilmek sahip InnerException özelliği aşağıdaki özel durum işleyicisi gösterildiği gibi özgün özel durum hakkında bilgi içerir.

try {
   indexes = s.FindOccurrences(toFind);
   ShowOccurrences(s, toFind, indexes);
}
catch (ArgumentNullException e) {
   Console.WriteLine("An exception ({0}) occurred.",
                     e.GetType().Name);
   Console.WriteLine("   Message:\n{0}", e.Message);
   Console.WriteLine("   Stack Trace:\n   {0}", e.StackTrace);
   Exception ie = e.InnerException;
   if (ie != null) {
      Console.WriteLine("   The Inner Exception:");
      Console.WriteLine("      Exception Name: {0}", ie.GetType().Name);
      Console.WriteLine("      Message: {0}\n", ie.Message);
      Console.WriteLine("      Stack Trace:\n   {0}\n", ie.StackTrace);
   }
}
// The example displays the following output:
//    'a' occurs at the following character positions: 4, 7, 15
//
//    An exception (ArgumentNullException) occurred.
//       Message: You must supply a search string.
//
//       Stack Trace:
//          at Library.FindOccurrences(String s, String f)
//       at Example.Main()
//
//       The Inner Exception:
//          Exception Name: ArgumentNullException
//          Message: Value cannot be null.
//    Parameter name: value
//
//          Stack Trace:
//          at System.String.IndexOf(String value, Int32 startIndex, Int32 count, Stri
//    ngComparison comparisonType)
//       at Library.FindOccurrences(String s, String f)

Bir özel durum gerektiğinde, var olan bir özel durum türü genellikle bir özel durum uygulama yerine .NET Framework kullanabilirsiniz. Bu iki koşullarda standart özel durum türünü kullanmanız gerekir:

  • Bir kullanım hatası nedeniyle bir özel durum atma (diğer bir deyişle, bir hata, yöntemi çağırmadan geliştirici tarafından yapılan program mantığı). Genellikle, bir özel durum gibi oluşturan ArgumentException, ArgumentNullException, InvalidOperationException, veya NotSupportedException. Özel durum nesnesi örnekleme Geliştirici Düzelt böylece hata açıklamalıdır olduğunda dize özel durum nesnenin oluşturucusuna sağlayın. Daha fazla bilgi için bkz: Message özelliği.

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

Aşağıdaki tabloda, genel özel durum türleri ve bunları altında oluşturan koşulları listeler.

Özel durum

Koşul

ArgumentException

Bir yönteme geçirilen bir null olmayan bağımsız değişkeni geçersiz.

ArgumentNullException

Bir yönteme geçirilen bir bağımsız değişken null.

ArgumentOutOfRangeException

Geçerli değer aralığının dışında bir bağımsız değişkendir.

DirectoryNotFoundException

Bir dizin yolu parçası geçerli değil.

DivideByZeroException

Payda değeri bir tamsayı olarak veya Decimal bölme işleminin sıfır değil.

DriveNotFoundException

Bir sürücü kullanılamıyor veya yok.

FileNotFoundException

Bir dosya yok.

FormatException

Bir değer bir dizeden gibi bir dönüştürme yöntemi tarafından dönüştürmek için uygun bir biçimde değil Parse.

IndexOutOfRangeException

Bir dizi veya koleksiyon sınırları dışında dizinidir.

InvalidOperationException

Bir yöntem çağrısı bir nesnenin geçerli durumu geçersiz.

KeyNotFoundException

Bir koleksiyonda üye erişmek için belirtilen anahtar bulunamıyor.

NotImplementedException

Bir yöntem veya işlem uygulanmadı.

NotSupportedException

Bir yöntem veya işlem desteklenmiyor.

ObjectDisposedException

Bir işlem atıldı bir nesne üzerinde gerçekleştirilir.

OverflowException

Bir aritmetik, atama veya dönüştürme işlemi taşma ile sonuçlanır.

PathTooLongException

Bir yol veya dosya adı sistem tarafından tanımlanan uzunluk üst sınırını aşıyor.

PlatformNotSupportedException

İşlem geçerli platformda desteklenmiyor.

RankException

Bir dizi boyutları yanlış sayıda ile bir yönteme geçirilir.

TimeoutException

Bir işlem için ayrılan süre doldu.

UriFormatException

Bir geçersiz Tekdüzen Kaynak Tanımlayıcısı'nı (URI) kullanılır.

Aşağıdaki durumlarda, bir hata durumu işlemek için varolan bir .NET Framework özel kullanarak yeterli değil:

  • Ne zaman özel durum için varolan bir .NET Framework özel eşlenemez bir benzersiz bir program hatası yansıtır.

  • Özel durum işleme, varolan bir .NET Framework özel veya özel durum için uygun olan işleme farklıdır gerektirdiğinde benzer bir özel durumdan disambiguated gerekir. Örneğin, throw, bir ArgumentOutOfRangeException hedef integral türü aralık dışında bir dizenin sayısal gösterimi ayrıştırılırken bir özel durum değil yöntemi çağrılırken sağlama uygun olmayan arayan sonuçlarından kısıtlanmış bir hata değerler için aynı özel durumu kullanmak istiyor.

Exception Sınıfı, tüm özel durumları .NET Framework temel sınıftır. Fazla türetilmiş sınıf üyelerinin devralınan davranışı kullanan Exception sınıfının; üyeleri geçersiz kılmaz Exception, ya da herhangi bir benzersiz üye tanımlayın yapın.

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

  1. Devralınan bir sınıf tanımlama Exception. Gerekirse, özel durum hakkında ek bilgi için sınıf tarafından gereken herhangi bir benzersiz üye tanımlayın. Örneğin, ArgumentException sınıfı içeren bir ParamName bağımsız değişken özel durumuna neden oldu parametrenin adını belirten özelliği ve RegexMatchTimeoutException özelliği içeren bir MatchTimeout zaman aşımı aralığı 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ıfları türetilmiş Not Exception devralınan üyeleri davranışını geçersiz kılmaz.

  3. Özel durum nesneyi seri hale getirilebilir olup olmadığını belirleyin. Seri hale getirme ve özel durum bilgilerini bir sunucu ve istemci proxy tarafından uzaktan iletişim bağlamında paylaşılmasına izin veren özel durum hakkında bilgi kaydetmek sağlar. Özel durum nesnesi serileştirilebilir yapmak için kendisiyle işaretlemek SerializableAttribute özniteliği.

  4. Özel durum sınıfınızın oluşturucular tanımlayın. Genellikle, özel durum sınıfları bir veya daha fazla aşağıdaki oluşturucular sahiptir:

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

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

    • Exception(String, Exception), belirtilen hata iletisiyle ve iç özel durumu ile yeni bir özel durum nesnesi başlatır.

    • Exception(SerializationInfo, StreamingContext), olduğu bir protected Yeni bir özel durum nesnesinden başlatır Oluşturucusu serileştirilmiş veriler. Bu oluşturucu, özel durum nesnesi serileştirilebilir yapmak seçtiyseniz uygulamalıdır.

Aşağıdaki örnek bir özel durum sınıfı kullanımını gösterir. Tanımlayan bir NotPrimeException bir istemci birinci değil bir başlangıç numarası belirterek bir dizi asal sayıları almaya çalıştığında oluşturulan özel durum. Özel durum yeni bir özellik tanımlar NonPrime, olmayan-asal özel duruma neden sayı döndürür. Korumalı bir parametresiz oluşturucu ve bir oluşturucu uygulayan yanı sıra SerializationInfo ve StreamingContext parametreleri seri hale getirme, NotPrimeException sınıfı tanımlar desteklemek için ek üç oluşturucular NonPrime özelliği. Asal olmayan sayısı değeri koruma yanı sıra bir temel sınıf oluşturucusu her oluşturucuyu ç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 kendi sınıf oluşturucusunda çağrısında istemci tarafından belirtilen sınıra asal sayıları 2 dizisini hesaplamak için Eratosthenes e kullanır. GetPrimesFrom Yöntemi, belirtilen alt sınır eşit veya daha büyük olan asal sayıları döndürür, ancak oluşturur bir NotPrimeException o alt sınırı 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ı, uygulama etki alanı sınırları aştığında biri. Her iki durumda da, özel durum ve istemci kodu başarıyla işlenen.

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("--------");
      }
   }
}

İçinde Windows 8.x Mağazası uygulamaları için .NET için Windows 8, bir özel durum ile .NET Framework yığın çerçevelerini yayıldığında bazı özel durum bilgilerini genellikle kaybolur. İle başlayarak .NET Framework 4.5.1 ve Windows 8.1, ortak dil çalışma zamanı orijinal kullanmaya devam eder Exception Bu özel bir .NET Framework yığın çerçevesinde değiştirilmediyse, oluşturulan nesne.

Aşağıdaki örnek, gösterir 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çbir catch bloğu için açıkça tanımlanmış 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()

*/

Evrensel Windows Platformu
8 sonrasında kullanılabilir
.NET Framework
1.1 sonrasında kullanılabilir
Taşınabilir Sınıf Kitaplığı
Destekleyen: taşınabilir .NET platformları
Silverlight
2.0 sonrasında kullanılabilir
Windows Phone Silverlight
7.0 sonrasında kullanılabilir
Windows Phone
8.1 sonrasında kullanılabilir

Bu türdeki herhangi bir public static (Visual Basic’te Paylaşılan Visual Basic'te), bu tür üyeler iş parçacığı güvenliklidir. Hiçbir örnek üyesinin, iş parçacığı güvenli olduğu garanti edilmez.

Başa dön
Show: