C# Farsi Course

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 9

‫زوگ سیشارپ – قسمت چهل و هفتم‬

‫ًَضتِی هسؼَد دسٍیطیاى‬

‫لیٌک هستقین ایي هغلة دس ٍبتاسگت‬

‫ ها‬exception ‫گرفته تمام‬

،‫ تشای اًجام ایيکاس‬.‫ تگیشیذ‬،‫ّا سا تذٍى دس ًظش گشفتي ًَع آىّا‬ exception ‫ هوکي است تخَاّیذ توام‬،‫تؼضی ٍقتّا‬
.‫ ًذاسد‬exception variable ٍ exception type ِ‫ هطخص هیکٌیذ ک‬catch ‫یک هذل‬

:‫فشم کلی آى تِضکل صیش است‬

catch {
// handle exceptions
}

exception ‫هیضَد ٍ تضویي هیکٌذ کِ تواهی‬ catch all exception handler ‫خظ کذ تاال تاػج تٍِجَد آهذى یک‬
.‫ّای تٍِجَد آهذُ گشفتِ ضًَذ‬

:‫تِ هثال صیش دقت کٌیذ‬

// Use the "catch all" catch.


using System;
class ExcDemo5
{
static void Main()
{
// Here, numer is longer than denom.
int[] numer = { 4, 8, 16, 32, 64, 128, 256, 512 };
int[] denom = { 2, 0, 4, 4, 0, 8 };

for (int i = 0; i < numer.Length; i++)


{
try
{
Console.WriteLine(numer[i] + " / " +
denom[i] + " is " +
numer[i] / denom[i]);
}
catch
{
// A "catch-all" catch.
Console.WriteLine("Some exception occurred.");
}
}
}
}

‫زوگ سیشارپ – قسمت چهل و هفتم‬ Page 1


/* Output

4 / 2 is 2
Some exception occurred.
16 / 4 is 4
32 / 4 is 8
Some exception occurred.
128 / 8 is 16
Some exception occurred.
Some exception occurred.

*/

.‫ ّا تاضذ‬catch ‫ دس لیست‬catch ‫ تایذ آخشیي‬catch all exception handler ِ‫ًکتِی هْن دیگش ایي است ک‬

‫استفادُ کٌیذ ٍ تِعَس هؼوَل تْتش است کِ ّش ًَع‬ catch all handler ‫دقت داضتِ تاضیذ کِ ًثایذ دس ّوِی هَاسد اص‬
.‫هطکل است‬ handler ‫ّا دسٍى یک‬ exception ‫کشدى توام‬ handle ‫ ّوچٌیي‬.‫کٌیذ‬ handle ًِ‫سا جذاگا‬ exception

‫ ّا سا تِعَس کلی تا استفادُ اص‬exception ِ‫ دس ضشایظ خاصی استفادُ هیضَد ٍ ًثایذ ّویط‬catch all handler ‫تٌاتشایي اص‬
.‫ کشد‬handle ‫آى‬

‫ های تو در تو‬Try block

‫ داخلی کِ تَسظ‬try block ‫ تٍِجَد آهذُ دس‬Exception .‫ دیگش قشاس گیشد‬try block ‫ هیتَاًذ دسٍى یک‬try block ‫یک‬
.‫ خاسجی گشفتِ ضَد‬try block ِ‫ هشتَط ت‬catch ‫ هیتَاًذ تَسظ‬،‫ گشفتِ ًطذُ تاضذ‬try ‫ هشتثظ تا ّواى‬catch

:‫ خاسجی آى سا هیگیشد‬try block ٍ ُ‫ داخلی گشفتِ ًطذ‬try block ‫ تَسظ‬IndexOutOfRangeException ،‫دس هثال صیش‬

// Use a nested try block.


using System;
class NestTrys
{
static void Main()
{
// Here, numer is longer than denom.
int[] numer = { 4, 8, 16, 32, 64, 128, 256, 512 };
int[] denom = { 2, 0, 4, 4, 0, 8 };

try
{
// outer try
for (int i = 0; i < numer.Length; i++)
{
try
{

‫زوگ سیشارپ – قسمت چهل و هفتم‬ Page 2


// nested try
Console.WriteLine(numer[i] + " / " +
denom[i] + " is " +
numer[i] / denom[i]);
}
catch (DivideByZeroException)
{
Console.WriteLine("Can't divide by Zero!");
}
}
}
catch (IndexOutOfRangeException)
{
Console.WriteLine("No matching element found.");
Console.WriteLine("Fatal error -- program terminated.");
}
}
}

/* Output

4 / 2 is 2
Can't divide by Zero!
16 / 4 is 4
32 / 4 is 8
Can't divide by Zero!
128 / 8 is 16
No matching element found.
Fatal error -- program terminated.

*/

ِ‫ تِ تشًاه‬،)divide-by-zero ‫ضَد (دس ایيجا‬ handle ‫داخلی‬ try block ‫ای کِ هیتَاًذ تَسظ‬ exception ،‫دس ایي هثال‬
ُ‫ خاسجی گشفتِ ضذ‬try block ‫ تَسظ‬،ِ‫ تٍِجَد آهذُ تِدلیل گزضتي اص حذ آسای‬exception ‫ اها‬.‫اجاصُ هیدّذ تا اداهِ یاتذ‬
.‫ٍ هَجة تِ پایاى سسیذى تشًاهِ هیضَد‬

‫ّا‬ error ‫ تؼضی اص‬.‫ضًَذ‬ handle ‫ّای هختلف اجاصُ هیدّذ تا اص سٍشّای هتفاٍتی‬ error ِ‫ّای تَدستَ ت‬ Try block

‫ تیطتش تشًاهًَِیساى‬.‫قاتل اصالح کشدى ًیستٌذ ٍ تؼضی دیگش خغاّای کَچکی ّستٌذ کِ هیتَاًٌذ تالفاصلِ دسست ضًَذ‬
try block ‫ کشدى خغاّایی کِ سخت قاتل اصالح کشدى ّستٌذ استفادُ هیکٌٌذ ٍ اص‬handle ‫ خاسجی تشای‬try block ‫اص‬
try block ‫ ضوا ّوچٌیي هیتَاًیذ اص‬.‫ تْشُ هیتشًذ‬،‫داخلی تشای دسست کشدى خغاّایی کِ ساحتتش اصالح هیضًَذ‬
ُ‫ استفاد‬،‫ ًطذُاًذ‬handle ‫ داخلی‬try block ‫ ّایی کِ دس‬error ‫ کشدى‬handle ‫تشای‬ catch all handler ‫خاسجی تِػٌَاى‬
.‫کٌیذ‬

‫زوگ سیشارپ – قسمت چهل و هفتم‬ Page 3


‫پرتاب کردن یک ‪Exception‬‬

‫دس هثالّای قثل‪ّ exception ،‬ایی کِ تِعَس خَدکاس تَسظ ‪ runtime system‬تَلیذ ضذُ تَدًذ‪ ،‬گشفتِ هیضذًذ‪ .‬اها ضوا‬
‫هیتَاًیذ تِصَست دستی یک ‪ exception‬سا تا استفادُ اص کلوِکلیذی ‪ throw‬پشتاب کٌیذ‪.‬‬

‫فشم کلی آى تِ ضکل صیش است‪:‬‬

‫;‪throw exceptOb‬‬

‫دس ایيجا‪ exceptOb ،‬تایذ یک ضیء اص کالس یک ‪ exception‬تاضذ کِ اص ‪ Exception‬اسثتشی کشدُ است‪.‬‬

‫تِ هثال صیش دقت کٌیذ‪:‬‬

‫;‪using System‬‬
‫‪class ThrowDemo‬‬
‫{‬
‫)(‪static void Main‬‬
‫{‬
‫‪try‬‬
‫{‬
‫;)"‪Console.WriteLine("Before throw.‬‬
‫;)(‪throw new DivideByZeroException‬‬
‫}‬
‫)‪catch (DivideByZeroException‬‬
‫{‬
‫;)"‪Console.WriteLine("Exception caught.‬‬
‫}‬
‫;)"‪Console.WriteLine("After try/catch statement.‬‬
‫}‬
‫}‬

‫‪/* Output‬‬

‫‪Before throw.‬‬
‫‪Exception caught.‬‬
‫‪After try/catch statement.‬‬

‫‪*/‬‬

‫ساختِ ضذُ است‪ .‬تِ یاد داضتِ‬ ‫‪new‬‬ ‫تا استفادُ اص‬ ‫‪throw‬‬ ‫دس قسوت‬ ‫‪DivideByZeroException‬‬ ‫ّواىعَس کِ هیتیٌیذ‪،‬‬
‫تاضیذ کِ ‪ throw‬یک ضیء سا پشتاب هیکٌذ‪ .‬تٌاتشایي ضوا تایذ یک ضیء تشای آى تساصیذ تا آى سا پشتاب کٌذ‪ .‬ایي تذاى‬
‫‪default‬‬ ‫هؼٌاست کِ ًویتَاًیذ یک ‪ type‬سا پشتاب کٌیذ‪ .‬دس ایي هَسد‪ ،‬تشای ساخت ضیء ‪ DivideByZeroException‬اص‬
‫ّا هَجَد ّستٌذ‪ .‬دس اکثش هَاسد‪،‬‬ ‫‪exception‬‬ ‫ّای دیگش ًیض تشای‬ ‫‪constructor‬‬ ‫استفادُ ضذُ است اها‬ ‫‪constructor‬‬

‫ّایی ّستٌذ کِ خَدتاى ساختِایذ‪ .‬دس اداهِی ایي هثحج‬ ‫‪exception class‬‬ ‫ّایی کِ پشتاب هیکٌیذ اضیای‬ ‫‪exception‬‬

‫هتَجِ خَاّیذ ضذ کِ چگًَِ ‪ّ exception class‬ای خَدتاى سا تساصیذ‪.‬‬

‫زوگ سیشارپ – قسمت چهل و هفتم‬ ‫‪Page 4‬‬


exception ‫پرتاب مجدد یک‬

‫سپس هیتَاًذ تَسظ یک‬ exception ‫هیتَاًذ هجذداً پشتاب ضَد ٍ ایي‬ catch ‫گشفتِ ضذُ تَسظ یک‬ exception ‫یک‬
‫ّای تیطتشی‬ handler ‫ایي است‬ exception ‫ یکی اص هْنتشیي دالیل پشتاب هجذد یک‬.‫گشفتِ ضَد‬ outer catch

‫ یک جٌثِ اص‬،‫اٍل‬ exception handler ‫ هوکي است‬،‫ تِػٌَاى هثال‬.‫دستشسی داضتِ تاضٌذ‬ exception ِ‫هیتَاًٌذ ت‬
‫ تشای پشتاب هجذد‬.‫ کٌذ‬handle ‫تٍِجَد آهذُ سا‬ exception ‫ جٌثِی دیگشی اص‬،‫ دٍم‬exception handler ٍ exception
:‫ تِضکل صیش‬.‫ استفادُ کٌیذ‬throw ‫ کافی است فقظ تِ تٌْایی اص کلوِی‬exception ‫یک‬

throw;

outer block ‫تایذ تَسظ یک‬ exception ‫ ایي‬،‫سا هجذداً پشتاب هیکٌیذ‬ exception ‫یِیاد داضتِ تاضیذ ٌّگاهیکِ یک‬
.‫گشفتِ ضَد‬

:‫ سا ًطاى هیدّذ‬exception ‫تشًاهِی صیش پشتاب هجذد یک‬

using System;
class Program
{
static void Main()
{
// Comment out the first 1-2 method invocations.
try
{
A();
B();
C(null);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}

static void A()


{
// Rethrow syntax.
try
{
int value = 1 / int.Parse("0");
}
catch
{
throw;
}
}

static void B()


{

‫زوگ سیشارپ – قسمت چهل و هفتم‬ Page 5


// Filtering exception types.
try
{
int value = 1 / int.Parse("0");
}
catch (DivideByZeroException ex)
{
throw ex;
}
}

static void C(string value)


{
// Generate new exception.
if (value == null)
{
throw new ArgumentNullException("value");
}
}
}

/* Output

Attempted to divide by zero.

//// if you comment out the first and second method invocations:
Value cannot be null.
Parameter name: value

*/

A() ‫ تٌْا هتذ‬،‫ دس ایي ٌّگام‬.‫ سا هطاّذُ خَاّیذ کشد‬Attempted to divide by zero ‫اگش تشًاهِی تاال سا اجشا کٌیذ پیغام‬
‫ تٍِجَد‬exception ،‫ اجشا هیضَد‬A() ‫ ٌّگاهیکِ دس اتتذا هتذ‬.‫ فشاخَاًی ًویضًَذ‬C() ٍ B() ‫فشاخَاًی ضذُ است ٍ هتذّای‬
ُ‫فشستاد‬ Main() ‫ضذُ ٍ تِ هتذ‬ throw ُ‫ضذُ است) دٍتاس‬ catch ‫ٍ یکتاس‬ throw ‫یکتاس‬ A() ‫آهذُ (کِ اتتذا دسٍى هتذ‬
.‫ضَد‬ handle ‫تٍِجَد آهذُ است کِ تایذ‬ exception ‫یک‬ A() ‫پس اص فشاخَاًی‬ Main() ‫ اکٌَى دسٍى هتذ‬.‫هیضَد‬
‫ اص‬.‫دادُ ضذُ ٍ پیغام خغای تٍِجَد آهذُ ًوایص دادُ هیضَد‬ Main() ‫دسٍى‬ catch ِ‫تٌاتشایي تالفاصلِ کٌتشل تشًاهِ ت‬
‫ دس‬.‫کٌیذ خشٍجی هتفاٍتی هیتیٌیذ‬ comment ‫ سا‬B() ٍ A() ‫ اگش هتذّای‬.‫دیگش اجشا ًویضًَذ‬ C() ٍ B() ‫ایيسٍ هتذّای‬
‫ ضذُ ٍ دسٍى هتذ‬throw ‫ تٍِجَد آهذُ تشای اٍلیيتاس‬exception ‫ ًذاسین صیشا‬exception ‫ دیگش پشتاب هجذد‬C() ‫هَسد هتذ‬
.‫ هیضَد‬handle ِ‫اصلی تشًاه‬

:‫تِ هثال دیگشی دس ایي هَسد تَجِ کٌیذ‬

// Rethrow an exception.
using System;
class Rethrow
{
public static void GenException()
{

‫زوگ سیشارپ – قسمت چهل و هفتم‬ Page 6


// Here, numer is longer than denom.
int[] numer = { 4, 8, 16, 32, 64, 128, 256, 512 };
int[] denom = { 2, 0, 4, 4, 0, 8 };

for (int i = 0; i < numer.Length; i++)


{
try
{
Console.WriteLine(numer[i] + " / " +
denom[i] + " is " +
numer[i] / denom[i]);
}
catch (DivideByZeroException)
{
Console.WriteLine("Can't divide by Zero!");
}
catch (IndexOutOfRangeException)
{
Console.WriteLine("No matching element found.");
throw; // rethrow the exception
}
}
}
}
class RethrowDemo
{
static void Main()
{
try
{
Rethrow.GenException();
}
catch (IndexOutOfRangeException)
{
// recatch exception
Console.WriteLine("Fatal error -- " + "program terminated.");
}
}
}

/* Output

4 / 2 is 2
Can't divide by Zero!
16 / 4 is 4
32 / 4 is 8
Can't divide by Zero!
128 / 8 is 16
No matching element found.
Fatal error -- program terminated.

*/

‫ اها‬.‫ ضذُ است‬handle ‫ تٍِجَد آهذُ ٍ دس ّواىجا ًیض‬GenException() ‫ دس هتذ‬DivideByZeroException ،ِ‫دس ایي تشًاه‬
.‫ ٍاگزاس ضذُ است‬Main() ‫ تِ هتذ‬IndexOutOfRangeException ‫ کشدى‬handle

‫زوگ سیشارپ – قسمت چهل و هفتم‬ Page 7


finally ‫استفاده از‬

exception ‫ هوکي است یک‬،‫ تشای هثال‬.‫ اجشا ضَد‬try/catch ‫گاّیاٍقات ضوا هیخَاّیذ یک تلَک اص کذ حتواً پس اص‬
ِ‫ سا تاص کشدُ است ک‬network connection ‫تاػج ضَد تا اداهِی اجشای یک هتذ پایاى یاتذ اها آى هتذ یک فایل یا یک‬
‫ ایي چٌیي ضشایغی دس تشًاهًَِیسی صیاد ّستٌذ ٍ سیضاسج ساُ حل سادُ ٍ هٌاسثی تشای آى‬.‫حتواً تایذ دس ًْایت تستِ ضَد‬
‫ فشم‬.‫ ّا قشاس تگیشد‬catch ‫ تایذ دس اًتْای دًثالِی‬Finally block .‫ است‬finally block ‫ استفادُ اص‬،‫اسائِ دادُ کِ ایي ساُ حل‬
:‫ تِصَست صیش هیتاضذ‬،‫ است‬finally ‫ کِ ضاهل‬try/catch ‫کلی‬

try {
// block of code to monitor for errors
}
catch (ExcepType1 exOb) {
// handler for ExcepType1
}
catch (ExcepType2 exOb) {
// handler for ExcepType2
}...
finally {
// fi nally code
}

‫ دس‬،‫ تا هَفقیت اجشا ضَد یا خیش‬try block ‫ ایي تذاى هؼٌاست کِ هْن ًیست‬.‫ تحت ّش ضشایغی اجشا هیضَد‬Finally block
.‫ اجشا خَاّذ ضذ‬finally block ‫ًْایت‬

:‫تِ هثال صیش تَجِ کٌیذ‬

// Use finally.
using System;
class UseFinally
{
public static void GenException(int what)
{
int t;
int[] nums = new int[2];
Console.WriteLine("Receiving " + what);
try
{
switch (what)
{
case 0:
t = 10 / what; // generate div-by-zero error
break;
case 1:
nums[4] = 4; // generate array index error
break;
case 2:
return; // return from try block
}

‫زوگ سیشارپ – قسمت چهل و هفتم‬ Page 8


}
catch (DivideByZeroException)
{
Console.WriteLine("Can't divide by Zero!");
return; // return from catch
}
catch (IndexOutOfRangeException)
{
Console.WriteLine("No matching element found.");
}
finally
{
Console.WriteLine("Leaving try.");
}
}
}
class FinallyDemo
{
static void Main()
{
for (int i = 0; i < 3; i++)
{
UseFinally.GenException(i);
Console.WriteLine();
}
}
}

/* Output

Receiving 0
Can't divide by Zero!
Leaving try.

Receiving 1
No matching element found.
Leaving try.

Receiving 2
Leaving try.

*/

ِ‫ّویط‬ finally block ،‫خاسج هیضَد‬ try block ‫ هْن ًیست تشًاهِ تِ چِ عشیقی اص‬،‫ّواىعَس کِ خشٍجی ًطاى هیدّذ‬
catch ‫قشاس گیشد دیگش‬ try block ‫دقیقاْ تؼذ اص یک‬ finally block ‫ ٌّگاهیکِ یک‬،‫ اص لحاػ تکٌیکی‬.‫اجشا خَاّذ ضذ‬
ُ‫ ًطذ‬handle ‫ ای‬exception ‫ اجشا خَاّذ ضذ اها ّیچ‬try block ‫ تؼذ اص‬finally block ٍ ‫ ًویتَاًذ تؼذ اص آىّا تیایذ‬block
.‫است‬

.‫کلیِ حقَق هادی ٍ هؼٌَی تشای ٍبسایت ٍبتاسگت هحفَػ است‬


.‫استفادُ اص ایي هغلة دس سایش ٍبسایتّا ٍ ًطشیات چاپی تٌْا تا رکش ٍ دسج لیٌک هٌثغ هجاص است‬

‫زوگ سیشارپ – قسمت چهل و هفتم‬ Page 9

You might also like