آموزش سی‌شارپ C# – بخش ۳۵

آموزش سی‌شارپ C# – بخش ۳۵
  • 1392/3/4
  • Jeff Mosawy
  • 19
  • مقدمه

هنگامی که در سی‌شارپ یا هر زبان دیگری کدنویسی می‌کنید، احتمالاً با مواردی مواجه خواهید شد که در حالت خاصی، برنامه شما دچار ایراد گردد. چطور؟ بزارید واضح‌تر بگویم!

فرض کنید که برای مثال شما یک برنامه ماشین‌حسابی را نوشته‌اید. قطعاً باید این مورد را در نظر گرفته باشید که کاربر هنگامی که با این برنامه در حال کار کردن است، نباید دچار ایرادی گردد که باعث شود برنامه شما هنگ کرده و خاموش گردد. برای مثال، اگر کاربر بیاید عددی را بر صفر تقسیم کند، خوب مسلماً سی‌شارپ کنترل برنامه را از دست خواهد داد و برنامه لغو خواهد شد.

در چنین حالتی شما باید این نوع عملیات را در نظر گرفته باشید تا از بروز چنین خطاهایی جلوگیری کنید. سی‌شارپ دستوری با نام Try … Catch را در خود جای داده است که باعث می‌شود از خطاهای احتمالی جلوگیری کند و برنامه شما لغو نشود.

  • معرفی دستور Try … Catch

دستور Try … Catch بدین شکل عمل می‌کند که شما به سی‌شارپ می‌گویید که یک دستوری را امتحان کن (Try کن)، اگر بدون خطا بود که اجرا کن، اگر دارای خطا بود، آن را کنترل کن (Catch کن). قالب این دستور (Syntax)‌ به شکل زیر است:

try

{

}

catch

{

}

در دستور زیر ما سعی می‌کنیم که یک فایل متنی را در RichTextBox ای با نام rtb لود کنیم:

try

{

            rtb.LoadFile(“C:/test.txt”);

}

catch (System.Exception excep)

{

            MessageBox.Show(excep.Message);

}

کد اصلی‌ای را که ما می‌خواهیم آن را در هنگام لود برنامه اجرا کنیم را همیشه در بین دو براکت مربوط به Try قرار می‌دهیم. ولی اگر که فایلی با نام text.txt وجود نداشت، دوست داریم که برنامه از کار نیفتد و پیغام “File Not Found” را داشته باشیم. ما می‌توانیم که این کار را در دستور Catch انجام دهیم. دقت کنید که در مقابل Catch دستور زیر است:

System.Exception excep

Exception یک شیءای در سی‌شارپ است که خطاها را کنترل می‌کند. این شیء در Namespace مربوط به System وجود دارد. پس می‌نویسیم: System.Exception

پس از ایجاد یک فاصله در مقابل آن (Space)، نام متغیری برای آن تعریف می‌کنیم؛ که در اینجا آن را Excep نامیده‌ایم.

اگر در هنگام لود فایل خطایی ایجاد شد، سی‌شارپ خطای ایجاد شده را در متغیر excep ذخیره می‌کند. شما وقتی که از مشخصه message برای excep استفاده می‌کنید، می‌توانید خطای ایجاد شده را به‌صورت یک String داشته باشید که آن را می‌توان در یک MessageBox نمایش داد.

1_tryCatch

وقتی که برنامه خود را اجرا کنید؛ اگر فایل ذکر شده وجود نداشته باشد، پیغام زیر برای شما نمایش داده خواهد شد:

2_tryCatch2

اگر نوع خطایی که ممکن است بوجود بیاید را از قبل میدانید، می‌توانید کدهای خودتان را به‌شکل زیر درآورید:

catch (System.IO.FileNotFoundException)

{

            MessageBox.Show(“File Not Found!”);

}

برای اینکه بفهمید که خطایی که قرار است ایجاد شود از چه نوع است می‌توانید از کد زیر استفاده کنید:

catch (System.Exception excep)

{

            MessaegBox.Show(excep.GetType().ToString());

}

که توسط یک MessageBox، نوع خطای ایجاد شده را برای شما می‌نویسد.

اگر که می‌خواهید از دردسرهای فوق خلاص شوید و خیلی کار را ساده پیش ببرید، کافیست کد زیر را جایگزین کنید:

try

{

            rtb.LoadFile(“C:/test.txt”);

}

Catch

{

            MessageBox.Show(“An error occurred”);

}

شما همچنان می‌توانید چندین catch‌ قرار دهید:

try

{

            rtb.LoadFile(“C:/test.txt”);

}

catch

{

            MessageBox.Show(“An error occurred”);

}

catch

{

            MessageBox.Show(“Couldn’t find the file”);

}

catch

{

            MessageBox.Show(“Or maybe it was something else.”);

}

در نهایت، برای دستور Try .. Catch یک دستور نهایی با نام Finally نیز وجود دارد که می‌توانید کارهایی را که لازم است انجام دهد را در آن قرار دهید. فرض کنید که شما فایلی را باز کرده‌اید که نیاز دارد که آن را ببینید؛ در نتیجه می‌بایست آن را در Finally قرار دهید.

try

{

            rtb.LoadFile(“C:/test.txt”);

}

catch (System.Exception excep)

{

            MessageBox.Show(excep.Message);

}

Finally

{

            //Close the file here

}

کدهای داخل Finally حتماً یکبار اجرا خواهند شد.

جهت دریافت این بخش آموزشی به صورت یک فایل PDF، اینجا را کلیک کنید.

دیدگاه خود را وارد کنید
تعداد دیدگاه ها : 19 دیدگاه
  1. با عرض سلام
    من تازه با گویا آی تی آشنا شدم ولی توی همین مدت کم عاشق تمام عیار آموزش ها و نکات مفیدتون شدم
    من تمامی پی دی اف های مربوط به آموزش سی شارپ رو دانلود کردم و از سطح علمی خیلی خوبی برخوردار هستش
    انشاءالله که همیشه موفق و موید باشید
    همین که دارید حرکتی در جهت افزایش سطح علمی جامعتون انجام می دید خیلی نسبت به بعضی از افراد و سایت هایی که خودشون رو می گیرن و فقط ادای سایت های خوبی مثل شما رو در آموزش به کاربرانشون در می یارن اون هم فقط با کپی کردن مطالب از سایت های دیگه ، جلوتر هستید
    سایت هایی مثل سایت شما که خودش تولید محصول آموزشی می کنه متاسفانه باید بگم که کم هستش .
    می خواهم همین جا از آقا سید جعفر موسوی از آموزش های خیلی عالیشون یه تشکر ویژه بکنم و از خدا براشون توفیق روزافزون و پیشرفت و موفقیت رو خواستارم
    مثل اینکه خیلی وراجی کردم
    دیگه سرتون رو درد نمیارم و ازتون فعلا خداحافظی می کنم
    منتظر آموزش های خوبتون هستم

    1. سلام دوست عزیزم،

      خیلی ممنونم از آموزش‌هایی که قرار دادم راضی هستید. البته از آنجایی که من دوست ندارم چیزی اساساً برای شخص دیگری هست رو به نام خودم بزنم، این آموزش‌ها منبع خاصی دارند که بر اساس سرفصل‌های اون دارم آموزش‌ها رو قرار می‌دم که می‌تونید با مراجعه به اولین بخش آموزشی، اونجا لینک مربوط به منبع رو مشاهده کنید.

      خیلی ممنونم از لطف جنابعالی.
      موفق باشید!

  2. راستی جناب آقای موسوی این پی دی اف آموزش شماره 35 سی شارپ رو واسم قرار بده
    خیلی ممنون
    یه سوالم داشتم که می دونم اینجا جاش نیست ولی خب طرح می کنم اگه می دونستید خوشحال می شم که جوابم رو بدین
    سوالم این هست که :
    من توی استفاده از سیستم عامل لینوکس یه مشکل خیلی اساسی (البته برای من) دارم و اونم اینکه نمی دونم چطوری با این سیستم عامل یعنی لینوکس به اینترنت وصل بشم
    اگه کمکم کنی خیلی ممنون می شم
    مثلا اگه اموزشی بدی یا حتی اگه مقاله ای چیزی داری معرفی کنی ممنون می شم
    می تونی به آدرس ایمیلم بفرستیش
    بازم ممنونم

    1. سلام دوست عزیز،

      انشاءالله امشب و یا فردا شب PDF رو قرار میدم.
      در رابطه با اتصال به اینترنت از طریق لینوکس، شما ذکر نکردید که اولاً شما از طریق Wireless وصل می‌شید و یا اتصال شما به‌صورت Wired هست؛ ثانیاً آیا تنظیمات کانکشن اینترنت شما (درصورتی که اتصال ADSL باشه) در داخل مورم وارد شد و به‌صورت Auto-Connect هستید و یا اینکه می‌بایست یک کانکشن در سیستم‌عامل بسازید تا اینکه وارد اینترنت بشید.

      باتشکر از شما.
      موفق باشید!

  3. سلام
    من می خوام با لینوکس اوبونتو به اینترنت وصل بشم و هیچی هم از اینکار بلد نیستم
    مودم بنده Adsl-wired هستش لطفا توضیج کامل با جزییاتش رو برام بگید
    من فعلا از سیستم عامل ویندوز 7 استفاده می کنم وبرای اینکه بتونم وارد اینترنت بشم باید یک کانکشن بسازم لطفا توضیج بدید چی کار باید بکنم
    و احیانا اگر خواستم کانکشنم بصورت Auto -connect بشه چی کار باید بکنم؟
    تمام مراحل رو اگر لطف کنید که مرحله به مرحله برام شرح بدید ممنون می شم.
    باتشکر
    موفق وموید باشید.

    1. سلام دوست عزیز،

      من تنظیمات اینترنت محیط Ubuntu رو خیلی یادم نمیاد؛ اما فکر می‌کنم می‌شد که اون داخل شما یک کانکشن ADSL بسازی؛ اگر مشکلی بود یک سرچی توی گوگل انجام بدید (ترجیحاً انگلیسی) حتماً حتماً پیدا می‌کنید.
      شما الان وقتی که ADSL رو با کانکشن وصل میشید به اینترنت، وارد تنظیمات مودم خود از طریق Browser که بشسید، کانکشن روی حالت Bridge تنظیم شده؛ برای اینکه Auto-Connect باشید، باید روی حالت PPOPE (اگر درست نوشته باشم) ببرید و داخل تنظیمات مورد نام‌کاربری و رمز عبور خودتون رو بزنید.

      موفق باشید!

  4. سلام
    فکر کردم دیگه آموزشارو ادامه نمیدین خوبه برگشتین
    دوست عزیز یه مدتیه تلاش میکنم سی شارپ یاد بگیرم به مشکل برمیخورم
    یه آموزش کامل و ساده وجود نداره تا شی گرائی و سی شارپو از مبتدی آموزش بده همشون از اول رفتن سراغ یه سری اصطلاحات سخت و حرفه ای که آدم گیج میشه
    آموزش هشمتیانم خوندم خیلی سخت توضیح میده
    میخوام بدونم یه آموزش شی گرائی با سی شارپ سراغ داری که خیلی نرم آموزش بده
    یا اصلا بگید از کجا شروع کنم (c++ رو تاحدی بلدم مثل همه تو دانشگاه)
    ممنون میشم راهنمایی کنید

    1. سلام دوست عزیزم،

      من کتابی رو سراغ ندارم (نه اینکه نباشه) که فقط شیء گرا توضیح داده باشه. بیشتر کتاب‌هایی رو اسماشون رو میدونم که یه حالت مرجع مانند دارند و از اول تا آخر توضیح دادند.
      من خودم سعی‌ام رو می‌کنم که تا مباحت شی‌گرایی پیش برم و حتی اون‌ها رو توضیح بدم؛ چرا که کل لذت برنامه‌نویسی با سی‌شارپ، برنامه‌نویسی به‌شیوه شیء گرا هست.

      موفق باشید!

    1. سلام دوست عزیز.

      متأسفانه فراموش کردم. الان قرار می‌دم.
      موفق باشید.

  5. ببخشید یه سوال داشتم، این کد دقیقا کجا به درد می خوره؟ چون وقتی ما یه اسم تو دایالوگ وارد می کنیم که تو کامپیوترمون نباشه، خود دایالوگ خطا میده و ربطی به visual stdio نداره.
    خیلی ممنونم.

    1. سلام دوست عزیزم،

      خوشحالم که به مطلب دقت کردی و برات سوال پیش اومد؛ فقط متاسفانه من دقیقاً متوجه سوال نشدم که بتونم راهنمایی کنم. منظورت کدام کد است؟ استفاده از Try و Catch؟
      موفق باشید!

    2. بله، همون Try و catch منظورم بود. چون در پروژه ای که ما از Dialog استفاده می کنیم، اگه فایلی رو بخواهیم Import کنیم که در سیستم موجود نباشه، خودِ Dialog خطا میده و بعد از اون Try catch خطا میده.
      خیلی ممنون از لطفتون.

  6. سلام خسته نباشید من تازه دارم با زبان سی شارپ آشنا میشم یه سوال دارم وقتی بخوام نام و کلمه عبور رو وارد کنم و برنامه با یه فایل که توش این مقادیر ذخیره شده رو مقایسه کنه اگه ورودی برابر باشه پیغام خوش آمد بده اگر نه که پیغام بده که نادرسته باید چی بنویسم؟

    1. سلام دوست عزیزم،

      برای اینکار بهتره که از دیتابیس استفاده بشه.
      موفق باشید!

  7. به نام خدا
    با سلام
    من وقتی از چند Catch استفاده می کنم به غیر از Catch اولی زیر بقیه یک خط قرمز می آید.
    باید چی کار کنم؟
    عکس:
    http://img1.tebyan.net/Big/1393/05/10c908a7f93845a0810504bea6213039.jpg

    1. با سلام،
      دوست عزیز، برای هر try فقط یک catch قابل تعریف است.
      موفق باشید.

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *