وقت بخیر دوستان، با آموزش برنامه نویسی (Visual Basic.NET (VB.NET از وب سایت پی وی لرن همراه هستیم. با مدیریت خطا (Exception) در VB.NET در خدمتتون هستیم و مباحثی چون ایجاد اکسپشن های تعریف شده توسط کاربر ، Throwing objects و کلاس های اکسپشن در فریم ورک Net. را نیز مورد بررسی قرار خواهیم داد. مدیریت اکسپشن ها بر پایه چهار کلمه ی کلیدی try، catch، finally و throw ساخته خواهد شد.
اکسپشن (Exception) مشکلی است که هنگام اجرای یک برنامه به وجود می آید. یک خطا (Exception) پاسخی است به یک شرایط استثنایی که هنگام اجرای برنامه به وجود می آید، می باشد. به عنوان مثال تلاش برای تقسیم با صفر.
اکسپشن ها (Exception) راهی برای انتقال کنترل از یک قسمت از برنامه به بخش دیگر را فراهم می کند. مدیریت اکسپشن VB.Net بر روی چهار کلمه کلیدی دلالت دارد: Try, Catch, Finally و Throw.
Try – یک بلوک Try یک بلوک کد را که اکسپشن های خاص برای آن ها فعال می شود ، مشخص می کند. Try توسط یک یا چند بلوک Catch دنبال می شود.
Catch – یک برنامه اکسپشن را با یک کنترل کننده خطا (exception handler) در مکانی در برنامه ای که می خواهید مشکل را حل کنید ، به دست می آورد. کلمه کلیدی Catch نشانگر catching یک اکسپشن می باشد.
Finally – از بلوک Finally برای اجرای مجموعه ای از عبارات استفاده می شود ، چه اکسپشن پرتاب شود یا پرتاب نشود. به عنوان مثال ، اگر فایلی را باز کنید ، باید بسته شود چه یک اکسپشن مطرح شده است یا نه.
Throw – وقتی یک مشکل ظاهر می شود ، برنامه خطا یا استثنائی را شکل می دهد. این کار با استفاده از کلمه کلیدی Throw انجام می شود.
در ادامه ی مبحث مدیریت خطا (Exception) در VB.NET ، سینتکس مربوطه را خواهیم داشت.
با فرض این که بلوک یک اکسپشن ایجاد کند ، یک روش یا متد با استفاده از ترکیبی از کلمات کلیدی Try و Catch یک اکسپشن را می گیرد. بلوک Try / Catch در اطراف کدی قرار دارد که ممکن است یک خطا ایجاد کند. کد درون بلوک Try / Catch به عنوان کد محافظت شده شناخته می شود ، و سینتکس استفاده از Try / Catch به شکل زیر می باشد.
1 2 3 4 5 6 7 8 9 10 | Try [ tryStatements ] [ Exit Try ] [ Catch [ exception [ As type ] ] [ When expression ] [ catchStatements ] [ Exit Try ] ] [ Catch ... ] [ Finally [ finallyStatements ] ] End Try |
شما می توانید عبارت چند گانه ی catch را برای گرفتن انواع مختلف catch از اکسپشن در مورد بلوک try تان لیست کنید که بیش از یک اکسپشن را در موقعیت های مختلف ایجاد می کند.
در فریم ورک دات نت (Net.) ، اکسپشن ها توسط کلاس ها نشان داده می شوند. گرو ه ها و کلاس های اکسپشن در Net Framework. عمدتا به طور مستقیم یا غیر مستقیم از کلاس System.Exception گرفته می شوند. برخی از کلاس های اکسپشن که از کلاس System.Exception استخراج شده ، کلاس های System.ApplicationException و System.SystemException می باشند.
گروه یا کلاس System.ApplicationException از اکسپشن های ایجاد شده توسط برنامه های کاربردی پشتیبانی می کند. بنابراین خطا های تعریف شده توسط برنامه نویسان باید از این کلاس نشات گرفته شود.
کلاس System.SystemException کلاس پایه برای همه خطاهای از پیش تعریف شده ی سیستم می باشد.
جدول زیر برخی از کلاس های خطای از پیش تعریف شده ی بر گرفته از کلاس Sytem.SystemException را ارائه می دهد.
کلاس خطا | شرح |
---|---|
System.IO.IOException | خطاهای I / O (ورودی و خروجی) را کنترل می کند. |
System.IndexOutOfRangeException | خطاهای ایجاد شده، هنگامی که یک روش به یک ایندکس آرایه خارج از محدوده اشاره می کند را، مدیریت می کند. |
System.ArrayTypeMismatchException | خطاهایی را مدیریت می کند که نوع با نوع آرایه ناسازگار است. |
System.NullReferenceException | خطاهای ایجاد شده از نا هماهنگی یک شیء پوچ (null) را کنترل می کند. |
System.DivideByZeroException | خطاهای ایجاد شده از تقسیم مقسوم به صفر را کنترل می کند. |
System.InvalidCastException | خطاهای ایجاد شده در حین typecasting را کنترل می کند. |
System.OutOfMemoryException | خطاهای ایجاد شده به علت کمبود حافظه ی خالی را کنترل می کند. |
System.StackOverflowException | خطاهای ایجاد شده از سرریز پشته (stack overflow) را کنترل می کند. |
با آموزش VB.NET و مدیریت اکسپشن ها همراه خواهیم بود.
VB.Net یک راه حل ساختاری برای رسیدگی به مشکلات اکسپشن را در قالب بلوک های try و catch فراهم می کند. با استفاده از این بلوک ها ، عبارت های هسته برنامه از عبارات error-handling جدا می شوند.
این بلوک های مدیریت خطا یا مدیریت اکسپشن ها را با استفاده از کلمات کلیدی Try، Catch و finally پیاده سازی می شوند. در زیر نمونه ای از پرتاب اکسپشن ، هنگام تقسیم بر شرایط صفر آمده است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Module exceptionProg Sub division(ByVal num1 As Integer, ByVal num2 As Integer) Dim result As Integer Try result = num1 \ num2 Catch e As DivideByZeroException Console.WriteLine("Exception caught: {0}", e) Finally Console.WriteLine("Result: {0}", result) End Try End Sub Sub Main() division(25, 0) Console.ReadKey() End Sub End Module |
هنگامی که کد بالا کامپایل و اجرا می شود، نتیجه ی زیر را ایجاد می کند.
1 2 3 | Exception caught: System.DivideByZeroException: Attempted to divide by zero. at ... Result: 0 |
مبحث مدیریت اکسپشن ها را با ایجاد اکسپشن های تعریف شده توسط کاربر ادامه می دهیم.
شما همچنین می توانید اکسپشن های خود را تعریف کنید. گروه ها و کلاس های اکسپشن های تعریف شده توسط کاربر از کلاس ApplicationException گرفته شده است. مثال زیر این مسئله را نشان می دهد به آن ها دقت نمایید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | Live Demo Module exceptionProg Public Class TempIsZeroException : Inherits ApplicationException Public Sub New(ByVal message As String) MyBase.New(message) End Sub End Class Public Class Temperature Dim temperature As Integer = 0 Sub showTemp() If (temperature = 0) Then Throw (New TempIsZeroException("Zero Temperature found")) Else Console.WriteLine("Temperature: {0}", temperature) End If End Sub End Class Sub Main() Dim temp As Temperature = New Temperature() Try temp.showTemp() Catch e As TempIsZeroException Console.WriteLine("TempIsZeroException: {0}", e.Message) End Try Console.ReadKey() End Sub End Module |
هنگامی که کد بالا کامپایل و اجرا می شود، نتیجه ی زیر را ایجاد می کند.
1 | TempIsZeroException: Zero Temperature found |
مدیریت خطا (Exception) در VB.NET را با بررسی پرتاب اشیاء (Throwing objects) ادامه می دهیم.
اگر آبجکت یا شیئی مستقیم یا غیر مستقیم از کلاس System.Exception مشتق شده باشد می توانید یک شی را پرتاب (throw) کنید.
برای پرتاب شیء (Throwing objects) موجود می توانید از عبارت throw در بلاک catch استفاده کنید.
1 | Throw [ expression ] |
برنامه ی زیر این موضوع را نشان می دهد.
1 2 3 4 5 6 7 8 9 10 11 12 | Module exceptionProg Sub Main() Try Throw New ApplicationException("A custom exception _ is being thrown here...") Catch e As Exception Console.WriteLine(e.Message) Finally Console.WriteLine("Now inside the Finally Block") End Try Console.ReadKey() End Sub End Module |
هنگامی که کد بالا کامپایل و اجرا می شود، نتیجه ی زیر را ایجاد می کند.
1 2 | A custom exception is being thrown here... Now inside the Finally Block |
مدیریت اکسپشن ها در این بخش به پایان می رسانیم.
در این بخش از آموزش VB.NET با مدیریت خطا (Exception) در VB.NET در خدمتتون بودیم و مباحثی چون ایجاد اکسپشن های تعریف شده توسط کاربر ، Throwing objects و کلاس های اکسپشن در فریم ورک Net. را نیز توضیح دادیم. در ادامه ی آموزش ویژوال بیسیک دات نت به بررسی در File Handling یا مدیریت فایل می پردازیم. با جلسات آموزشی وب سایت آموزشی پی وی لرن همراه باشید.