Exception Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Uygulama yürütme sırasında oluşan hataları temsil eder.
public ref class Exception
public ref class Exception : System::Runtime::Serialization::ISerializable
public ref class Exception : System::Runtime::InteropServices::_Exception, System::Runtime::Serialization::ISerializable
public class Exception
public class Exception : System.Runtime.Serialization.ISerializable
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDual)]
[System.Serializable]
public class Exception : System.Runtime.Serialization.ISerializable
[System.Serializable]
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Runtime.InteropServices.ComVisible(true)]
public class Exception : System.Runtime.InteropServices._Exception, System.Runtime.Serialization.ISerializable
[System.Serializable]
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Runtime.InteropServices.ComVisible(true)]
public class Exception : System.Runtime.Serialization.ISerializable
type Exception = class
type Exception = class
interface ISerializable
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDual)>]
[<System.Serializable>]
type Exception = class
interface ISerializable
[<System.Serializable>]
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Exception = class
interface ISerializable
interface _Exception
[<System.Serializable>]
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Exception = class
interface ISerializable
Public Class Exception
Public Class Exception
Implements ISerializable
Public Class Exception
Implements _Exception, ISerializable
- Devralma
-
Exception
- Türetilmiş
- Öznitelikler
- Uygulamalar
Örnekler
Aşağıdaki örnekte, hataları işlemek ArithmeticException için tanımlanan ( catch``with
F# dilinde) bir blok gösterilmektedir. Bu catch
blok da hata yakalarDivideByZeroException, çünkü DivideByZeroException türetilir ArithmeticException ve hatalar için DivideByZeroException açıkça tanımlanmış bir blok yokturcatch
.
using namespace System;
int main()
{
int x = 0;
try
{
int y = 100 / x;
}
catch ( ArithmeticException^ e )
{
Console::WriteLine( "ArithmeticException Handler: {0}", e );
}
catch ( Exception^ e )
{
Console::WriteLine( "Generic Exception Handler: {0}", e );
}
}
/*
This code example produces the following results:
ArithmeticException Handler: System.DivideByZeroException: Attempted to divide by zero.
at main()
*/
using System;
class ExceptionTestClass
{
public static void Main()
{
int x = 0;
try
{
int y = 100 / x;
}
catch (ArithmeticException e)
{
Console.WriteLine($"ArithmeticException Handler: {e}");
}
catch (Exception e)
{
Console.WriteLine($"Generic Exception Handler: {e}");
}
}
}
/*
This code example produces the following results:
ArithmeticException Handler: System.DivideByZeroException: Attempted to divide by zero.
at ExceptionTestClass.Main()
*/
module ExceptionTestModule
open System
let x = 0
try
let y = 100 / x
()
with
| :? ArithmeticException as e ->
printfn $"ArithmeticException Handler: {e}"
| e ->
printfn $"Generic Exception Handler: {e}"
// This code example produces the following results:
// ArithmeticException Handler: System.DivideByZeroException: Attempted to divide by zero.
// at <StartupCode$fs>.$ExceptionTestModule.main@()
Class ExceptionTestClass
Public Shared Sub Main()
Dim x As Integer = 0
Try
Dim y As Integer = 100 / x
Catch e As ArithmeticException
Console.WriteLine("ArithmeticException Handler: {0}", e.ToString())
Catch e As Exception
Console.WriteLine("Generic Exception Handler: {0}", e.ToString())
End Try
End Sub
End Class
'
'This code example produces the following results:
'
'ArithmeticException Handler: System.OverflowException: Arithmetic operation resulted in an overflow.
' at ExceptionTestClass.Main()
'
Açıklamalar
Bu sınıf, tüm özel durumlar için temel sınıftır. Bir hata oluştuğunda, sistem veya şu anda yürütülen uygulama, hata hakkında bilgi içeren bir özel durum oluşturarak bunu bildirir. Bir özel durum oluşturulduktan sonra, uygulama veya varsayılan özel durum işleyicisi tarafından işlenir.
Bu bölümdeki konular:
Hatalar ve özel durumlar
Try/catch blokları
Özel durum türü özellikleri
Özel durum sınıfı özellikleri
Performansla ilgili dikkat edilmesi gerekenler
Özel durum yeniden oluşturma
Standart özel durumlar seçme
Özel durum uygulama
Hatalar ve özel durumlar
Çalışma zamanı hataları çeşitli nedenlerle oluşabilir. Ancak, tüm hatalar kodunuzda özel durumlar olarak işlenmemelidir. Çalışma zamanında oluşabilecek bazı hata kategorileri ve bunlara yanıt vermenin uygun yolları aşağıdadır.
Kullanım hataları. Kullanım hatası, program mantığında özel durumla sonuçlanabilir bir hatayı temsil eder. Ancak, hata özel durum işleme yoluyla değil, hatalı kodu değiştirerek giderilmelidir. Örneğin, aşağıdaki örnekte yönteminin Object.Equals(Object) geçersiz kılınması, bağımsız değişkenin
obj
her zaman null olmayan olması gerektiğini varsayar.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)); } }
// In F#, null is not a valid state for declared types // without 'AllowNullLiteralAttribute' [<AllowNullLiteral>] type Person() = member val Name = "" with get, set override this.GetHashCode() = this.Name.GetHashCode() override this.Equals(obj) = // This implementation contains an error in program logic: // It assumes that the obj argument is not null. let p = obj :?> Person this.Name.Equals p.Name let p1 = Person() p1.Name <- "John" let p2: Person = null // The following throws a NullReferenceException. printfn $"p1 = p2: {p1.Equals p2}"
Public Class Person Private _name As String Public Property Name As String Get Return _name End Get Set _name = value End Set End Property Public Overrides Function Equals(obj As Object) As Boolean ' This implementation contains an error in program logic: ' It assumes that the obj argument is not null. Dim p As Person = CType(obj, Person) Return Me.Name.Equals(p.Name) End Function End Class Module Example Public Sub Main() Dim p1 As New Person() p1.Name = "John" Dim p2 As Person = Nothing ' The following throws a NullReferenceException. Console.WriteLine("p1 = p2: {0}", p1.Equals(p2)) End Sub End Module
Olduğunda NullReferenceException sonuçlanan
obj
özel durum,null
geçersiz kılmayı çağırmadan Object.Equals ve sonra yeniden derlemeden önce kaynak kodu açıkça null için test edilecek şekilde değiştirilerek ortadan kaldırılabilir. Aşağıdaki örnek, birnull
bağımsız değişkeni işleyen düzeltilmiş kaynak kodunu içerir.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
// In F#, null is not a valid state for declared types // without 'AllowNullLiteralAttribute' [<AllowNullLiteral>] type Person() = member val Name = "" with get, set override this.GetHashCode() = this.Name.GetHashCode() override this.Equals(obj) = // This implementation handles a null obj argument. match obj with | :? Person as p -> this.Name.Equals p.Name | _ -> false let p1 = Person() p1.Name <- "John" let p2: Person = null printfn $"p1 = p2: {p1.Equals p2}" // The example displays the following output: // p1 = p2: False
Public Class Person Private _name As String Public Property Name As String Get Return _name End Get Set _name = value End Set End Property Public Overrides Function Equals(obj As Object) As Boolean ' This implementation handles a null obj argument. Dim p As Person = TryCast(obj, Person) If p Is Nothing Then Return False Else Return Me.Name.Equals(p.Name) End If End Function End Class Module Example Public Sub Main() Dim p1 As New Person() p1.Name = "John" Dim p2 As Person = Nothing Console.WriteLine("p1 = p2: {0}", p1.Equals(p2)) End Sub End Module ' The example displays the following output: ' p1 = p2: False
Kullanım hataları için özel durum işleme kullanmak yerine hata ayıklama derlemelerindeki kullanım hatalarını belirlemek için yöntemini ve Trace.Assert hem hata ayıklama hem de yayın derlemelerindeki kullanım hatalarını belirlemek için yöntemini kullanabilirsinizDebug.Assert. Daha fazla bilgi için bkz. Yönetilen Kodda Onaylamalar.
Program hataları. Program hatası, hatasız kod yazarak mutlaka kaçınılamayan bir çalışma zamanı hatasıdır.
Bazı durumlarda, program hatası beklenen veya rutin bir hata koşulunu yansıtabilir. Bu durumda, program hatasıyla başa çıkmak için özel durum işleme kullanmaktan kaçınmak ve bunun yerine işlemi yeniden denemek isteyebilirsiniz. Örneğin, kullanıcının belirli bir biçimde tarih girişi bekleniyorsa, yöntemini çağırarak DateTime.TryParseExact tarih dizesini ayrıştırabilirsiniz. Bu yöntem, tarih dizesi değere dönüştürülemediğinde özel FormatException durum oluşturan yöntemini kullanmak DateTime.ParseExact yerine ayrıştırma işleminin başarılı olup olmadığını belirten bir DateTime değer döndürürBoolean. Benzer şekilde, bir kullanıcı var olmayan bir dosyayı açmaya çalışırsa, önce dosyanın var olup olmadığını denetlemek için yöntemini çağırabilir File.Exists ve yoksa, kullanıcıya oluşturmak isteyip istemediğini sorabilirsiniz.
Diğer durumlarda, program hatası kodunuzda işlenebilen beklenmeyen bir hata koşulunu yansıtır. Örneğin, bir dosyanın var olduğundan emin olmak için denetlemiş olsanız bile, dosyayı açabilmeniz için önce silinebilir veya bozulmuş olabilir. Bu durumda, bir StreamReader nesne örneği oluşturarak veya yöntemini çağırarak Open dosyayı açmaya çalışmak bir FileNotFoundException özel durum oluşturabilir. Böyle durumlarda, hatadan kurtarmak için özel durum işlemeyi kullanmanız gerekir.
Sistem hataları. Sistem hatası, program aracılığıyla anlamlı bir şekilde işlenemeyen bir çalışma zamanı hatasıdır. Örneğin, ortak dil çalışma zamanı ek bellek ayıramıyorsa herhangi bir yöntem özel OutOfMemoryException durum oluşturabilir. Normalde sistem hataları özel durum işleme kullanılarak işlenmez. Bunun yerine, gibi AppDomain.UnhandledException bir olay kullanabilir ve özel durum bilgilerini günlüğe kaydetmek ve uygulama sonlandırılmadan önce kullanıcıya hatayı bildirmek için yöntemini çağırabilirsiniz Environment.FailFast .
Try/catch bloğu
Ortak dil çalışma zamanı, özel durumların nesneler olarak temsilini ve program kodu ile özel durum işleme kodunun bloklara ve catch
bloklara ayrılmasını temel alan bir özel durum işleme try
modeli sağlar. Her biri belirli bir özel durum türünü işlemek için tasarlanmış bir veya daha fazla catch
blok veya başka bir bloktan daha belirli bir özel durumu yakalamak için tasarlanmış bir blok olabilir.
Bir uygulama, bir uygulama kodu bloğunun yürütülmesi sırasında oluşan özel durumları işlerse, kod bir try
deyimi içine yerleştirilmelidir ve blok olarak adlandırılır try
. Bir try
blok tarafından oluşan özel durumları işleyen uygulama kodu bir catch
deyimi içine yerleştirilir ve blok olarak adlandırılır catch
. Sıfır veya daha fazla catch
blok bir try
blokla ilişkilendirilir ve her catch
blok, işlediği özel durum türlerini belirleyen bir tür filtresi içerir.
Bir try
blokta özel durum oluştuğunda sistem, özel durumu işleyen bir catch
blok bulana kadar ilişkili catch
blokları uygulama kodunda göründükleri sırayla arar. catch
Catch bloğunun tür T
filtresi veya türetilen herhangi bir türü T
belirtiyorsaT
, blok türü özel durumunu işler. Sistem, özel durumu işleyen ilk catch
bloğu buldukta aramayı durdurur. Bu nedenle, uygulama kodunda, catch
bir türü işleyen bir bloğun, bu bölümü izleyen örnekte gösterildiği gibi, temel türlerini işleyen bir catch
blok öncesinde belirtilmesi gerekir. İşleyen System.Exception
bir catch bloğu en son belirtilir.
Geçerli try
blokla ilişkili bloklardan catch
hiçbiri özel durumu işlemezse ve geçerli try
blok geçerli çağrıdaki diğer try
blokların içinde iç içe yerleştirilmişse, sonraki kapsayan catch
try
blokla ilişkili bloklar aranır. Özel durum için bir catch
blok bulunmazsa, sistem geçerli çağrıda önceki iç içe yerleştirme düzeylerini arar. Geçerli çağrıda özel durum için bir catch
blok bulunmazsa, özel durum çağrı yığınına geçirilir ve önceki yığın çerçevesinde özel durumu işleyen bir catch
blok aranılır. Çağrı yığını araması, özel durum işlenene kadar veya çağrı yığınında başka çerçeve kalmayıncaya kadar devam eder. Çağrı yığınının üst kısmına özel durumu işleyen bir catch
blok bulunmaksızın ulaşılırsa, varsayılan özel durum işleyicisi bunu işler ve uygulama sonlandırılır.
F# deneyin.. with İfadesi
F# blokları kullanmaz catch
. Bunun yerine, oluşturulan bir özel durum deseni tek with
bir blok kullanılarak eşleştirilir. Bu bir ifade olduğundan, deyimi yerine tüm yolların aynı türü döndürmesi gerekir. Daha fazla bilgi edinmek için bkz . Deneme... ifadesiyle birlikte.
Özel durum türü özellikleri
Özel durum türleri aşağıdaki özellikleri destekler:
Hatayı açıklayan, okunabilir metin. Bir özel durum oluştuğunda, çalışma zamanı kullanıcıyı hatanın doğası hakkında bilgilendirmek ve sorunu çözmek için eylem önermek için bir kısa mesaj sağlar. Bu metin iletisi özel durum nesnesinin Message özelliğinde tutulur. Özel durum nesnesinin oluşturulması sırasında, söz konusu özel durumun ayrıntılarını açıklamak için oluşturucuya bir metin dizesi geçirebilirsiniz. Oluşturucuya hiçbir hata iletisi bağımsız değişkeni sağlanmazsa, varsayılan hata iletisi kullanılır. Daha fazla bilgi için özelliğine Message bakın.
Özel durum oluştuğunda çağrı yığınının durumu. özelliği, StackTrace hatanın kodda nerede oluştuğunun belirlenmesi için kullanılabilecek bir yığın izlemesi taşır. Yığın izlemesi, çağrılan tüm yöntemleri ve çağrıların yapıldığı kaynak dosyadaki satır numaralarını listeler.
Özel durum sınıfı özellikleri
Exception sınıfı, kod konumunu, türünü, yardım dosyasını ve özel durumun nedenini tanımlamaya yardımcı olan bir dizi özellik içerir: StackTrace, InnerException, Message, HelpLink, HResult, , Source, TargetSiteve Data.
İki veya daha fazla özel durum arasında nedensel bir ilişki olduğunda, InnerException özelliği bu bilgileri korur. Dış özel durum bu iç özel duruma yanıt olarak oluşturulur. Dış özel durumu işleyen kod, hatayı daha uygun şekilde işlemek için önceki iç özel durumdaki bilgileri kullanabilir. Özel durumla ilgili ek bilgiler, özelliğinde Data anahtar/değer çiftleri koleksiyonu olarak depolanabilir.
Özel durum nesnesinin oluşturulması sırasında oluşturucuya geçirilen hata iletisi dizesi yerelleştirilmelidir ve sınıfı kullanılarak bir kaynak dosyasından ResourceManager sağlanabilir. Yerelleştirilmiş kaynaklar hakkında daha fazla bilgi için Uydu Derlemeleri Oluşturma ve Kaynakları Paketleme ve Dağıtma konularına bakın.
Kullanıcıya özel durumun neden oluştuğu hakkında kapsamlı bilgi sağlamak için, özellik bir yardım dosyasının HelpLink URL'sini (veya URN'sini) tutabilir.
sınıfı Exception , değeri 0x80131500 olan HRESULT COR_E_EXCEPTION kullanır.
Sınıfının bir örneğinin ilk özellik değerlerinin Exception listesi için oluşturuculara Exception bakın.
Performansla ilgili önemli noktalar
Özel durum oluşturmak veya işlemek, önemli miktarda sistem kaynağı ve yürütme süresi tüketir. Tahmin edilebilir olayları veya akış denetimini işlemek için değil, yalnızca gerçekten olağanüstü koşulları işlemek için özel durumlar atın. Örneğin, bir sınıf kitaplığı geliştirirken olduğu gibi bazı durumlarda, yönteminizin geçerli parametrelerle çağrılmasını beklediğiniz için, yöntem bağımsız değişkeni geçersizse bir özel durum oluşturmak mantıklıdır. Geçersiz bir yöntem bağımsız değişkeni, kullanım hatasının sonucu değilse, olağanüstü bir şey oluştuğu anlamına gelir. Buna karşılık, kullanıcı girişi geçersizse bir özel durum oluşturmayın, çünkü kullanıcıların bazen geçersiz veri girmesini bekleyebilirsiniz. Bunun yerine, kullanıcıların geçerli giriş girebilmesi için bir yeniden deneme mekanizması sağlayın. Kullanım hatalarını işlemek için özel durumlar da kullanmamalısınız. Bunun yerine, kullanım hatalarını tanımlamak ve düzeltmek için onayları kullanın.
Ayrıca, bir dönüş kodu yeterli olduğunda özel durum oluşturmayın; dönüş kodunu özel duruma dönüştürmeyin; ve düzenli olarak bir özel durum yakalamayın, yoksayın ve işlemeye devam edin.
Özel durum yeniden oluşturma
Çoğu durumda, özel durum işleyicisi yalnızca özel durumu çağırana geçirmek ister. Bu en sık şu durumlarda oluşur:
Sırayla çağrıları .NET Framework sınıf kitaplığındaki veya diğer sınıf kitaplıklarındaki yöntemlere sarmalayan bir sınıf kitaplığı.
Önemli bir özel durumla karşılaşan bir uygulama veya kitaplık. Özel durum işleyicisi özel durumu günlüğe kaydedebilir ve sonra özel durumu yeniden oluşturabilir.
Bir özel durumu yeniden oluşturmanın önerilen yolu C# dilinde throw deyimini, F# dilinde reraise işlevini ve ifade eklemeden Visual Basic throw deyimini kullanmaktır. Bu, özel durum çağırana yayıldığında tüm çağrı yığını bilgilerinin korunmasını sağlar. Aşağıdaki örnek bunu göstermektedir. dize uzantısı yöntemi, FindOccurrences
bağımsız değişkenlerini önceden doğrulamadan bir veya daha fazla çağrıyı öğesine String.IndexOf(String, Int32) sarmalar.
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();
}
}
open System
module Library =
let findOccurrences (s: string) (f: string) =
let indexes = ResizeArray()
let mutable currentIndex = 0
try
while currentIndex >= 0 && currentIndex < s.Length do
currentIndex <- s.IndexOf(f, currentIndex)
if currentIndex >= 0 then
indexes.Add currentIndex
currentIndex <- currentIndex + 1
with :? ArgumentNullException ->
// Perform some action here, such as logging this exception.
reraise ()
indexes.ToArray()
Imports System.Collections.Generic
Imports System.Runtime.CompilerServices
Public Module Library
<Extension()>
Public Function FindOccurrences(s As String, f As String) As Integer()
Dim indexes As New List(Of Integer)
Dim currentIndex As Integer = 0
Try
Do While currentIndex >= 0 And currentIndex < s.Length
currentIndex = s.IndexOf(f, currentIndex)
If currentIndex >= 0 Then
indexes.Add(currentIndex)
currentIndex += 1
End If
Loop
Catch e As ArgumentNullException
' Perform some action here, such as logging this exception.
Throw
End Try
Return indexes.ToArray()
End Function
End Module
Arayan daha sonra iki kez arar FindOccurrences
. öğesine yapılan ikinci çağrıda FindOccurrences
, çağıran arama dizesi olarak bir null
geçirir ve bu da yönteminin String.IndexOf(String, Int32) bir ArgumentNullException özel durum oluşturmasına neden olur. Bu özel durum yöntemi tarafından FindOccurrences
işlenir ve çağırana geri geçirilir. Throw deyimi ifade olmadan kullanıldığından, örnekteki çıkış çağrı yığınının korunduğunu 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()
open Library
let showOccurrences toFind (indexes: int[]) =
printf $"'{toFind}' occurs at the following character positions: "
for i = 0 to indexes.Length - 1 do
printf $"""{indexes[i]}{if i = indexes.Length - 1 then "" else ", "}"""
printfn ""
let s = "It was a cold day when..."
let indexes = findOccurrences s "a"
showOccurrences "a" indexes
printfn ""
let toFind: string = null
try
let indexes = findOccurrences s toFind
showOccurrences toFind indexes
with :? ArgumentNullException as e ->
printfn $"An exception ({e.GetType().Name}) occurred."
printfn $"Message:\n {e.Message}\n"
printfn $"Stack Trace:\n {e.StackTrace}\n"
// 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 'value')
//
// Stack Trace:
// at System.String.IndexOf(String value, Int32 startIndex, Int32 count, Stri
// ngComparison comparisonType)
// at Library.findOccurrences(String s, String f)
// at <StartupCode$fs>.main@()
Module Example
Public Sub Main()
Dim s As String = "It was a cold day when..."
Dim indexes() As Integer = s.FindOccurrences("a")
ShowOccurrences(s, "a", indexes)
Console.WriteLine()
Dim toFind As String = Nothing
Try
indexes = s.FindOccurrences(toFind)
ShowOccurrences(s, toFind, indexes)
Catch e As ArgumentNullException
Console.WriteLine("An exception ({0}) occurred.",
e.GetType().Name)
Console.WriteLine("Message:{0} {1}{0}", vbCrLf, e.Message)
Console.WriteLine("Stack Trace:{0} {1}{0}", vbCrLf, e.StackTrace)
End Try
End Sub
Private Sub ShowOccurrences(s As String, toFind As String, indexes As Integer())
Console.Write("'{0}' occurs at the following character positions: ",
toFind)
For ctr As Integer = 0 To indexes.Length - 1
Console.Write("{0}{1}", indexes(ctr),
If(ctr = indexes.Length - 1, "", ", "))
Next
Console.WriteLine()
End Sub
End Module
' 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 kullanılarak yeniden oluşturulursa
throw e;
Throw e
raise e
deyimi, tam çağrı yığını korunmaz ve örnek aşağıdaki çıkışı oluşturur:
'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 Library.FindOccurrences(String s, String f)
at Example.Main()
Biraz daha hantal bir alternatif, yeni bir özel durum oluşturmak ve özgün özel durumun çağrı yığını bilgilerini bir iç özel durumda korumaktır. Daha sonra çağıran, yığın çerçevesini ve özgün özel durum InnerException hakkındaki diğer bilgileri almak için yeni özel durumun özelliğini kullanabilir. Bu durumda throw deyimi şöyledir:
throw new ArgumentNullException("You must supply a search string.",
e);
raise (ArgumentNullException("You must supply a search string.", e) )
Throw New ArgumentNullException("You must supply a search string.",
e)
Aşağıdaki özel durum işleyicisinde gösterildiği gibi, özel durumu işleyen kullanıcı kodunun InnerException özelliğin özgün özel durum hakkında bilgi içerdiğini bilmesi gerekir.
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)
try
let indexes = findOccurrences s toFind
showOccurrences toFind indexes
with :? ArgumentNullException as e ->
printfn $"An exception ({e.GetType().Name}) occurred."
printfn $" Message:\n{e.Message}"
printfn $" Stack Trace:\n {e.StackTrace}"
let ie = e.InnerException
if ie <> null then
printfn " The Inner Exception:"
printfn $" Exception Name: {ie.GetType().Name}"
printfn $" Message: {ie.Message}\n"
printfn $" Stack Trace:\n {ie.StackTrace}\n"
// 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)
Try
indexes = s.FindOccurrences(toFind)
ShowOccurrences(s, toFind, indexes)
Catch e As ArgumentNullException
Console.WriteLine("An exception ({0}) occurred.",
e.GetType().Name)
Console.WriteLine(" Message: {1}{0}", vbCrLf, e.Message)
Console.WriteLine(" Stack Trace:{0} {1}{0}", vbCrLf, e.StackTrace)
Dim ie As Exception = e.InnerException
If ie IsNot Nothing Then
Console.WriteLine(" The Inner Exception:")
Console.WriteLine(" Exception Name: {0}", ie.GetType().Name)
Console.WriteLine(" Message: {1}{0}", vbCrLf, ie.Message)
Console.WriteLine(" Stack Trace:{0} {1}{0}", vbCrLf, ie.StackTrace)
End If
End Try
' 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)
Standart özel durumlar seçme
Özel durum oluşturmanız gerektiğinde, özel bir özel durum uygulamak yerine genellikle .NET Framework mevcut bir özel durum türünü kullanabilirsiniz. Bu iki koşul altında standart bir özel durum türü kullanmanız gerekir:
Bir kullanım hatasının (yani, yönteminizi çağıran geliştirici tarafından yapılan program mantığındaki bir hatanın) neden olduğu bir özel durum oluşturacaksınız. Genellikle , ArgumentNullException, InvalidOperationExceptionveya NotSupportedExceptiongibi ArgumentExceptionbir özel durum oluşturursunuz. Özel durum nesnesinin örneğini oluştururken özel durum nesnesinin oluşturucusunun sağladığınız dize, geliştiricinin düzeltebilmesi için hatayı açıklamalıdır. Daha fazla bilgi için özelliğine Message bakın.
Var olan bir .NET Framework özel durumuyla çağırana iletilebilen bir hatayı işliyebilirsiniz. Mümkün olan en türetilmiş özel durumu oluşturmanız gerekir. Örneğin, bir yöntem bir bağımsız değişkenin sabit listesi türünün geçerli bir üyesi olmasını gerektiriyorsa, yerine bir InvalidEnumArgumentException (en çok türetilen sınıf) ArgumentExceptionoluşturmalısınız.
Aşağıdaki tabloda, yaygın özel durum türleri ve bunların hangi koşullar altında oluşturulduğu listelenmiştir.
Özel durum | Koşul |
---|---|
ArgumentException | Bir yönteme geçirilen null olmayan bir bağımsız değişken geçersiz. |
ArgumentNullException | Yöntemine geçirilen bir bağımsız değişkendir null . |
ArgumentOutOfRangeException | Bağımsız değişken geçerli değer aralığının dışındadır. |
DirectoryNotFoundException | Dizin yolunun bir bölümü geçerli değil. |
DivideByZeroException | Tamsayı veya Decimal bölme işlemindeki payda sıfırdır. |
DriveNotFoundException | Bir sürücü kullanılamıyor veya yok. |
FileNotFoundException | Dosya yok. |
FormatException | Değer, gibi Parse bir dönüştürme yöntemiyle bir dizeden dönüştürülecek uygun bir biçimde değildir. |
IndexOutOfRangeException | Dizin, dizi veya koleksiyonun sınırlarının dışındadır. |
InvalidOperationException | Yöntem çağrısı bir nesnenin geçerli durumunda geçersiz. |
KeyNotFoundException | Koleksiyondaki bir üyeye erişmek için belirtilen anahtar bulunamıyor. |
NotImplementedException | Yöntem veya işlem uygulanmaz. |
NotSupportedException | Yöntem veya işlem desteklenmiyor. |
ObjectDisposedException | Bir işlem, atılmış bir nesne üzerinde gerçekleştirilir. |
OverflowException | Aritmetik, atama veya dönüştürme işlemi taşmayla sonuç edilir. |
PathTooLongException | Yol veya dosya adı, sistem tanımlı uzunluk üst sınırını aşıyor. |
PlatformNotSupportedException | İşlem geçerli platformda desteklenmiyor. |
RankException | Yanlış sayıda boyuta sahip bir dizi bir yönteme geçirilir. |
TimeoutException | Bir işleme ayrılan zaman aralığının süresi doldu. |
UriFormatException | Geçersiz bir Tekdüzen Kaynak Tanımlayıcısı (URI) kullanılıyor. |
Özel durum uygulama
Aşağıdaki durumlarda, bir hata koşulunu işlemek için mevcut bir .NET Framework özel durumunu kullanmak yeterli değildir:
Özel durum, var olan bir .NET Framework özel durumuyla eşlenemeyen benzersiz bir program hatası yansıttığında.
Özel durum, var olan bir .NET Framework özel durumu için uygun işlemeden farklı bir işleme gerektirdiğinde veya özel durumun benzer bir özel durumdan ayrılmış olması gerektiğinde. Örneğin, hedef tam sayı türünün aralığı dışında olan bir dizenin sayısal gösterimini ayrıştırırken özel ArgumentOutOfRangeException durum oluşturursanız, çağıranın yöntemi çağırırken uygun kısıtlanmış değerleri sağlamamasından kaynaklanan bir hata için aynı özel durumu kullanmak istemezsiniz.
Exception sınıfı, .NET Framework tüm özel durumların temel sınıfıdır. Birçok türetilmiş sınıf, sınıfın üyelerinin devralınan Exception davranışına güvenir; üyelerini Exceptiongeçersiz kılmaz veya benzersiz üye tanımlamaz.
Kendi özel durum sınıfınızı tanımlamak için:
öğesinden Exceptiondevralan bir sınıf tanımlayın. Gerekirse, özel durum hakkında ek bilgi sağlamak için sınıfınızın ihtiyaç duyduğu tüm benzersiz üyeleri tanımlayın. Örneğin, sınıfı bağımsız ArgumentException değişkeni özel duruma neden olan parametrenin adını belirten bir ParamName özellik içerir ve RegexMatchTimeoutException özelliği zaman aşımı aralığını belirten bir MatchTimeout özellik içerir.
Gerekirse, işlevselliğini değiştirmek veya değiştirmek istediğiniz devralınan üyeleri geçersiz kılın. Varolan türetilmiş sınıfların Exception çoğunun devralınan üyelerin davranışını geçersiz kılmadığını unutmayın.
Özel özel durum nesnenizin serileştirilebilir olup olmadığını belirleyin. Seri hale getirme, özel durum hakkındaki bilgileri kaydetmenizi sağlar ve uzaktan iletişim bağlamında bir sunucu ve istemci proxy'si tarafından özel durum bilgilerinin paylaşılmasına izin verir. Özel durum nesnesini seri hale getirmek için özniteliğiyle SerializableAttribute işaretleyin.
Özel durum sınıfınızın oluşturucularını tanımlayın. Genellikle, özel durum sınıflarının aşağıdaki oluşturuculardan biri veya daha fazlası vardır:
Exception(), yeni bir özel durum nesnesinin özelliklerini başlatmak için varsayılan değerleri kullanır.
Exception(String), belirtilen hata iletisiyle yeni bir özel durum nesnesi başlatır.
Exception(String, Exception), belirtilen hata iletisi ve iç özel durum ile yeni bir özel durum nesnesi başlatır.
Exception(SerializationInfo, StreamingContext), serileştirilmiş verilerden yeni bir özel durum nesnesi başlatan bir
protected
oluşturucudur. Özel durum nesnenizi seri hale getirmeyi seçtiyseniz bu oluşturucuyu uygulamanız gerekir.
Aşağıdaki örnekte özel bir özel durum sınıfının kullanımı gösterilmektedir. İstemci, asal olmayan bir NotPrimeException
başlangıç numarası belirterek bir dizi asal sayı almaya çalıştığında oluşan bir özel durum tanımlar. Özel durum, NonPrime
özel duruma neden olan asal olmayan bir sayı döndüren yeni bir özelliği tanımlar. Sınıf, korumalı bir parametresiz oluşturucu ve serileştirme için ve parametreleriyle SerializationInfo bir oluşturucu uygulamanın yanı sıra, NotPrimeException
özelliğini desteklemek NonPrime
için üç ek oluşturucu StreamingContext tanımlar. Her oluşturucu, asal olmayan sayının değerini korumaya ek olarak bir temel sınıf oluşturucuyu çağırır. sınıfı NotPrimeException
özniteliğiyle SerializableAttribute de işaretlenir.
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; } }
}
namespace global
open System
open System.Runtime.Serialization
[<Serializable>]
type NotPrimeException =
inherit Exception
val notAPrime: int
member this.NonPrime =
this.notAPrime
new (value) =
{ inherit Exception($"%i{value} is not a prime number."); notAPrime = value }
new (value, message) =
{ inherit Exception(message); notAPrime = value }
new (value, message, innerException: Exception) =
{ inherit Exception(message, innerException); notAPrime = value }
// F# does not support protected members
new () =
{ inherit Exception(); notAPrime = 0 }
new (info: SerializationInfo, context: StreamingContext) =
{ inherit Exception(info, context); notAPrime = 0 }
Imports System.Runtime.Serialization
<Serializable()> _
Public Class NotPrimeException : Inherits Exception
Private notAPrime As Integer
Protected Sub New()
MyBase.New()
End Sub
Public Sub New(value As Integer)
MyBase.New(String.Format("{0} is not a prime number.", value))
notAPrime = value
End Sub
Public Sub New(value As Integer, message As String)
MyBase.New(message)
notAPrime = value
End Sub
Public Sub New(value As Integer, message As String, innerException As Exception)
MyBase.New(message, innerException)
notAPrime = value
End Sub
Protected Sub New(info As SerializationInfo,
context As StreamingContext)
MyBase.New(info, context)
End Sub
Public ReadOnly Property NonPrime As Integer
Get
Return notAPrime
End Get
End Property
End Class
PrimeNumberGenerator
Aşağıdaki örnekte gösterilen sınıf, sınıf oluşturucusunun çağrısında istemci tarafından belirtilen sınıra kadar olan asal sayıların sırasını hesaplamak için Eratosthenes'in Sieve'sini kullanır. yöntemi, GetPrimesFrom
belirtilen alt sınırdan büyük veya bu sınıra eşit olan tüm asal sayıları döndürür, ancak bu alt sınır bir asal sayı değilse bir NotPrimeException
oluşturur.
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();
}
}
namespace global
open System
[<Serializable>]
type PrimeNumberGenerator(upperBound) =
let start = 2
let maxUpperBound = 10000000
let primes = ResizeArray()
let primeTable =
upperBound + 1
|> Array.zeroCreate<bool>
do
if upperBound > maxUpperBound then
let message = $"{upperBound} exceeds the maximum upper bound of {maxUpperBound}."
raise (ArgumentOutOfRangeException message)
// Create array and mark 0, 1 as not prime (True).
primeTable[0] <- true
primeTable[1] <- true
// Use Sieve of Eratosthenes to determine prime numbers.
for i = start to float upperBound |> sqrt |> ceil |> int do
if not primeTable[i] then
for multiplier = i to upperBound / i do
if i * multiplier <= upperBound then
primeTable[i * multiplier] <- true
// Populate array with prime number information.
let mutable index = start
while index <> -1 do
index <- Array.FindIndex(primeTable, index, fun flag -> not flag)
if index >= 1 then
primes.Add index
index <- index + 1
member _.GetAllPrimes() =
primes.ToArray()
member _.GetPrimesFrom(prime) =
let start =
Seq.findIndex ((=) prime) primes
if start < 0 then
raise (NotPrimeException(prime, $"{prime} is not a prime number.") )
else
Seq.filter ((>=) prime) primes
|> Seq.toArray
Imports System.Collections.Generic
<Serializable()> Public Class PrimeNumberGenerator
Private Const START As Integer = 2
Private maxUpperBound As Integer = 10000000
Private upperBound As Integer
Private primeTable() As Boolean
Private primes As New List(Of Integer)
Public Sub New(upperBound As Integer)
If upperBound > maxUpperBound Then
Dim message As String = String.Format(
"{0} exceeds the maximum upper bound of {1}.",
upperBound, maxUpperBound)
Throw New ArgumentOutOfRangeException(message)
End If
Me.upperBound = upperBound
' Create array and mark 0, 1 as not prime (True).
ReDim primeTable(upperBound)
primeTable(0) = True
primeTable(1) = True
' Use Sieve of Eratosthenes to determine prime numbers.
For ctr As Integer = START To CInt(Math.Ceiling(Math.Sqrt(upperBound)))
If primeTable(ctr) Then Continue For
For multiplier As Integer = ctr To CInt(upperBound \ ctr)
If ctr * multiplier <= upperBound Then primeTable(ctr * multiplier) = True
Next
Next
' Populate array with prime number information.
Dim index As Integer = START
Do While index <> -1
index = Array.FindIndex(primeTable, index, Function(flag)
Return Not flag
End Function)
If index >= 1 Then
primes.Add(index)
index += 1
End If
Loop
End Sub
Public Function GetAllPrimes() As Integer()
Return primes.ToArray()
End Function
Public Function GetPrimesFrom(prime As Integer) As Integer()
Dim start As Integer = primes.FindIndex(Function(value)
Return value = prime
End Function)
If start < 0 Then
Throw New NotPrimeException(prime, String.Format("{0} is not a prime number.", prime))
Else
Return primes.FindAll(Function(value)
Return value >= prime
End Function).ToArray()
End If
End Function
End Class
Aşağıdaki örnek, yöntemine GetPrimesFrom
asal olmayan numaralarla iki çağrı yapar ve bunlardan biri uygulama etki alanı sınırlarını aşıyor. Her iki durumda da özel durum oluşturulur ve istemci kodunda başarıyla işlenir.
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("--------");
}
}
}
open System
open System.Reflection
let limit = 10000000
let primes = PrimeNumberGenerator limit
let start = 1000001
try
let values = primes.GetPrimesFrom start
printfn $"There are {values.Length} prime numbers from {start} to {limit}"
with :? NotPrimeException as e ->
printfn $"{e.NonPrime} is not prime"
printfn $"{e}"
printfn "--------"
let domain = AppDomain.CreateDomain "Domain2"
let gen =
domain.CreateInstanceAndUnwrap(
typeof<PrimeNumberGenerator>.Assembly.FullName,
"PrimeNumberGenerator", true,
BindingFlags.Default, null,
[| box 1000000 |], null, null)
:?> PrimeNumberGenerator
try
let start = 100
printfn $"{gen.GetPrimesFrom start}"
with :? NotPrimeException as e ->
printfn $"{e.NonPrime} is not prime"
printfn $"{e}"
printfn "--------"
Imports System.Reflection
Module Example
Sub Main()
Dim limit As Integer = 10000000
Dim primes As New PrimeNumberGenerator(limit)
Dim start As Integer = 1000001
Try
Dim values() As Integer = primes.GetPrimesFrom(start)
Console.WriteLine("There are {0} prime numbers from {1} to {2}",
start, limit)
Catch e As NotPrimeException
Console.WriteLine("{0} is not prime", e.NonPrime)
Console.WriteLine(e)
Console.WriteLine("--------")
End Try
Dim domain As AppDomain = AppDomain.CreateDomain("Domain2")
Dim gen As PrimeNumberGenerator = domain.CreateInstanceAndUnwrap(
GetType(Example).Assembly.FullName,
"PrimeNumberGenerator", True,
BindingFlags.Default, Nothing,
{1000000}, Nothing, Nothing)
Try
start = 100
Console.WriteLine(gen.GetPrimesFrom(start))
Catch e As NotPrimeException
Console.WriteLine("{0} is not prime", e.NonPrime)
Console.WriteLine(e)
Console.WriteLine("--------")
End Try
End Sub
End Module
' The example displays the following output:
' 1000001 is not prime
' NotPrimeException: 1000001 is not a prime number.
' at PrimeNumberGenerator.GetPrimesFrom(Int32 prime)
' at Example.Main()
' --------
' 100 is not prime
' NotPrimeException: 100 is not a prime number.
' at PrimeNumberGenerator.GetPrimesFrom(Int32 prime)
' at Example.Main()
' --------
Windows Çalışma Zamanı ve .NET Framework 4.5.1
Windows 8 için Windows 8.x Store uygulamaları için .NET'te, .NET Framework olmayan yığın çerçeveleri aracılığıyla bir özel durum yayıldığında bazı özel durum bilgileri genellikle kaybolur. .NET Framework 4.5.1 ve Windows 8.1'dan başlayarak, özel durum .NET Framework olmayan bir yığın çerçevesinde değiştirilmediği sürece ortak dil çalışma zamanı, oluşan özgün Exception nesneyi kullanmaya devam eder.
Oluşturucular
Exception() |
Exception sınıfının yeni bir örneğini başlatır. |
Exception(SerializationInfo, StreamingContext) |
Exception sınıfının yeni bir örneğini serileştirilmiş verilerle başlatır. |
Exception(String) |
Belirtilen hata iletisiyle sınıfının yeni bir örneğini Exception başlatır. |
Exception(String, Exception) |
Belirtilen bir hata iletisi ve bu özel durumun nedeni olan iç özel duruma başvuru ile sınıfının yeni bir örneğini Exception başlatır. |
Özellikler
Data |
Özel durum hakkında kullanıcı tanımlı ek bilgiler sağlayan bir anahtar/değer çifti koleksiyonu alır. |
HelpLink |
Bu özel durumla ilişkili yardım dosyasının bağlantısını alır veya ayarlar. |
HResult |
Belirli bir özel duruma atanan kodlanmış sayısal bir değer olan HRESULT değerini alır veya ayarlar. |
InnerException |
Exception Geçerli özel duruma neden olan örneği alır. |
Message |
Geçerli özel durumu açıklayan bir ileti alır. |
Source |
Hataya neden olan uygulamanın veya nesnenin adını alır veya ayarlar. |
StackTrace |
Çağrı yığınındaki anlık çerçevelerin dize gösterimini alır. |
TargetSite |
Geçerli özel durumu oluşturan yöntemini alır. |
Yöntemler
Equals(Object) |
Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Devralındığı yer: Object) |
GetBaseException() |
Türetilmiş bir sınıfta geçersiz kılındığında, sonraki bir veya daha fazla özel durumun kök nedeni olan değerini döndürür Exception . |
GetHashCode() |
Varsayılan karma işlevi işlevi görür. (Devralındığı yer: Object) |
GetObjectData(SerializationInfo, StreamingContext) |
Türetilmiş bir sınıfta geçersiz kılındığında, özel durum hakkındaki bilgilerle öğesini ayarlar SerializationInfo . |
GetType() |
Geçerli örneğin çalışma zamanı türünü alır. |
GetType() |
Type Geçerli örneğini alır. (Devralındığı yer: Object) |
MemberwiseClone() |
Geçerli Objectöğesinin sığ bir kopyasını oluşturur. (Devralındığı yer: Object) |
ToString() |
Geçerli özel durumun dize gösterimini oluşturur ve döndürür. |
Ekinlikler
SerializeObjectState |
Kullanımdan kalktı.
Bir özel durum, özel durum hakkında serileştirilmiş veriler içeren bir özel durum nesnesi oluşturmak üzere seri hale getirildiğinde gerçekleşir. |