نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی
  • خانه
  • ویندوز 10
  • Winforms مدیریت استثنا را درست در c. اشکال زدایی و مدیریت استثنا

Winforms مدیریت استثنا را درست در c. اشکال زدایی و مدیریت استثنا

ثابت های کامپایل شرطی. این به شما امکان می دهد ثابت هایی را که بعداً در روش چاپ مشروط WriteIf در کلاس های Debug و Trace استفاده می شوند، تعریف کنید. قدرت این مکانیسم این است که ثابت ها را می توان در فایل پیکربندی پروژه بدون تغییر کد پروژه و بدون نیاز به کامپایل مجدد آن تغییر داد.

اشکال زدایی و میز کار Visual Studio.Net

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

رسیدگی به استثناها

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

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

در زبان های برنامه نویسی برای پردازش موقعیت های استثنایی بیشترین رویکردهای مختلف.

مدیریت استثنا در C/C++

سبک برنامه نویسی C با توصیف متدهای کلاس به عنوان مشخص می شود توابع بولی، در صورت تکمیل عادی روش، true و در صورت وقوع false را برمی گرداند وضعیت استثنایی. فراخوانی متد در یک دستور If تعبیه شده است که در صورت عدم موفقیت متد، خطا را کنترل می کند:

bool MyMethod(...)(...) if !MyMethod()(// رسیدگی به خطا) (// اجرای عادی)

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

بنابراین، در C / C ++، از طرح بلوک try / catch استفاده می شود که ماهیت آن به شرح زیر است. بخشی از برنامه که در آن استثنا، به عنوان یک بلوک تلاش محافظت شده قالب بندی شده است. اگر در حین اجرای آن وجود داشته باشد استثنا، سپس اجرای try-block با طبقه بندی استثنا قطع می شود. این استثنا پردازش یکی از بلوک‌های catch مربوط به نوع استثنا را شروع می‌کند. C/C++ از دو چنین طرحی استفاده می کند. یکی از آنها - طرح تمدید- مربوط به به اصطلاح ساختاری یا C-exceptions. طرح دوم - بدون تمدید- با استثناهای C++ مطابقت دارد. در طرح اول، کنترل کننده استثنا - بلوک catch - کنترل را به نقطه ای از بلوک try برمی گرداند. در طرح دوم، کنترل به بلوک try بر نمی گردد.

با برخی تفاوت های نحوی طرح تمدیددر زبان های VB/VBA استفاده می شود.

طرح مدیریت استثنا در سی شارپ

زبان سی شارپ طرح استثنای C++ را به ارث برد و تنظیمات خود را در آن انجام داد. بیایید نگاهی دقیق تر به این طرح بیندازیم و با دستور ساخت شروع کنیم در نهایت تلاش کن:

سعی کنید (...) گرفتن (T1 e1) (...) ... گرفتن (Tk ek) (...) در نهایت (...)

هر جا که یک بلوک از نظر نحوی در یک ماژول مجاز باشد، می توان با افزودن کلمه کلیدی try، بلوک را محافظت کرد. یک بلوک try را می توان با بلوک های catch به نام دنبال کرد بلوک های کنترل کننده استثنا، ممکن است چندین مورد از آنها وجود داشته باشد، ممکن است غایب باشند. این سکانس را تمام می کند در نهایت مسدود کردن- بلوک نهایی، که ممکن است وجود نداشته باشد. کل این ساختار می تواند تودرتو باشد - بلوک try می تواند شامل ساخت و ساز باشد در نهایت تلاش کن.

پرتاب استثناها. ایجاد اشیاء استثنایی

در بدنه یک بلوک try، ممکن است رخ دهد استثنامنجر به پرتاب استثناها. به صورت رسمی استثنا انداختنزمانی اتفاق می‌افتد که دستور throw اجرا می‌شود. این عبارت اغلب در روده های سیستم عامل، زمانی که سیستم دستورات یا تابع APIنمی تواند کار خود را انجام دهد اما این اپراتور می تواند بخشی از متن برنامه try-block و زمانی اجرا شود که در نتیجه تجزیه و تحلیل، مشخص شود که بیشتر کار معمولیغیر ممکن

از نظر نحوی، دستور throw به این صورت است:

پرتاب[بیان]

عبارت throw یک شی از یک کلاس را مشخص می کند که زیر کلاس کلاس Exception است. این معمولا یک عبارت جدید است که یک شی جدید ایجاد می کند. اگر وجود نداشته باشد، استثناء فعلی مجدداً برگردانده می شود. اگر استثنایی انداخته شود سیستم عامل، سپس خود استثنا را طبقه بندی می کند، یک شی از کلاس مربوطه ایجاد می کند و به طور خودکار فیلدهای آن را پر می کند.

در مدلی که ما در نظر می گیریم، استثناها اشیایی هستند که کلاس آنها از نوادگان کلاس Exception است. این کلاس و بسیاری از فرزندان آن بخشی از FCL هستند، اگرچه در فضاهای نام مختلف پراکنده هستند. هر کلاس مشخص می کند نوع خاصیطبق طبقه بندی پذیرفته شده در Framework .Net استثنا می شود. در اینجا فقط چند مورد است کلاس های استثنااز فضای نام System: ArgumentException، ArgumentOutOfRangeException، ArithmeticException، BadImageFormatException، DivideByZeroException، OverflowException. در فضای نام System.IO جمع آوری شده است کلاس های استثنامرتبط با مسائل ورودی/خروجی: DirectoryNotFoundException، FileNotFoundException و بسیاری موارد دیگر. نام همه کلاس های استثنابا کلمه استثنا خاتمه دهید. شما مجاز به ایجاد خود هستید کلاس های استثنا، آنها را از کلاس Exception به ارث می برد.

هنگام اجرای دستور throw، یک شی te ایجاد می شود که کلاس TE آن استثنای فعلی را مشخص می کند و فیلدها حاوی اطلاعاتی در مورد اتفاق افتاده است. وضعیت استثنایی. اجرای دستور throw باعث می شود که روند عادی محاسبات در آنجا متوقف شود. اگر این اتفاق در یک بلوک تلاش محافظت‌شده رخ دهد، مرحله شروع می‌شود "گرفتن" یک استثنایکی از کنترل کننده های استثنا

گرفتن یک استثنا

کنترل کننده catch block - استثنا دارای نحو زیر است:

گرفتن (T e) (...)

کلاس T مشخص شده در هدر بلوک catch باید متعلق به آن باشد کلاس های استثنا. یک بلوک catch با آرگومان رسمی e از کلاس T این پتانسیل را دارد که استثنای فعلی te کلاس TE را بگیرد اگر و فقط اگر te تخصیص سازگار با e باشد. به عبارت دیگر، گرفتن پتانسیل به این معنی است که تخصیص e = te مجاز است، که زمانی امکان پذیر است که کلاس TE از نوادگان کلاس T باشد. کنترل کننده ای که کلاس T آن از کلاس Exception است کنترل کننده جهانی، به طور بالقوه می تواند هر استثنایی را بگیرد زیرا همه آنها فرزندان آن هستند.

ممکن است مهاجمان بالقوه زیادی وجود داشته باشد، فقط یکی از آنها استثنا را ثبت می کند - کسی که در لیست چک اولین است. روال تایید چیست؟ او کاملا طبیعی است. ابتدا، کنترل‌کننده‌ها به ترتیبی که از بلوک try پیروی می‌کنند بررسی می‌شوند و اولین گیربکس بالقوه فعال می‌شود، استثنا را می‌گیرد و آن را مدیریت می‌کند. از اینجا مشخص می شود که ترتیب در لیست بلوک های گیر بسیار مهم است. اکثرا اول میرن پردازنده های تخصصی، سپس با افزایش جهانی بودن. بنابراین، کنترل کننده استثنا DivideByZeroException باید ابتدا و پس از آن - Main برود. اگر هیچ استثناء گیر بالقوه ای نیز در آن وجود نداشته باشد، کنترل کننده استاندارد کار می کند و با صدور یک پیام مناسب، اجرای برنامه را قطع می کند.

گرفتن استثناها

در حالی که دات نت فریم ورک شامل تعداد زیادی ازکلاس های استثنا از پیش تعریف شده، این سوال مطرح می شود: چگونه می توان از آنها در کد برای گرفتن شرایط اشتباه استفاده کرد؟ برای مقابله با موقعیت های اشتباه احتمالی در کد سی شارپ، برنامه معمولا به بلوک های سه تایی تقسیم می شود انواع متفاوت:

    بلوک ها تلاش كردنکدهایی را کپسوله کنید که بخشی از اقدامات عادی یک برنامه را تشکیل می دهد که به طور بالقوه می تواند با موقعیت های خطای جدی مواجه شود.

    بلوک ها گرفتنکدی را کپسوله کنید که موقعیت‌های خطای رخ داده در کد بلوک try را کنترل می‌کند. همچنین مکان مناسبی برای ثبت خطاها است.

    بلوک ها سرانجامکدی را کپسوله کنید که هر منبعی را پاک می‌کند یا اقدامات دیگری را انجام می‌دهد که معمولاً در پایان یک بلوک تلاش یا گرفتن انجام می‌شوند. درک این نکته مهم است که این بلوک چه استثنایی پرتاب شود یا نه اجرا می شود.

تلاش کن و بگیر

اساس مدیریت استثنا در سی شارپ، جفت کلمات کلیدی try and catch است. این کلمات کلیدی با هم کار می کنند و نمی توان آنها را جداگانه استفاده کرد. در زیر آمده است فرم کلیتعاریف بلوک های try/catch برای رسیدگی به استثناها:

امتحان کنید ( // بلوک کد برای خطا بررسی شد. ) catch (ExcepType1 exOb) ( // Exception handler از نوع ExcepType1. ) catch (ExcepType2 exOb) ( // Exception handler از نوع ExcepType2. ) ...

که در آن ExcepType نوع استثنایی است که مطرح می شود. هنگامی که یک استثنا توسط دستور try پرتاب می شود، توسط دستور catch جفتی آن گرفته می شود، که سپس استثنا را مدیریت می کند. بسته به نوع استثنا، دستور catch مربوطه نیز اجرا می شود. بنابراین، اگر انواع استثنای پرتاب شده و آنچه در دستور catch مشخص شده یکسان باشد، این دستور خاص اجرا می‌شود و بقیه موارد نادیده گرفته می‌شوند. هنگامی که یک استثنا گرفته می شود، متغیر استثنا exOb مقدار خود را می گیرد. در واقع نیازی به تعیین متغیر exOb نیست. به عنوان مثال، در صورتی که کنترل کننده استثنا نیازی به دسترسی به شی استثنا نداشته باشد، نیازی به مشخص شدن نیست، که اغلب اینطور است. برای رسیدگی به یک استثنا، نوع آن کافی است.

با این حال، توجه داشته باشید که اگر هیچ استثنایی وجود نداشته باشد، بلوک دستور try به طور معمول خاتمه می یابد و تمام دستورات catch آن حذف می شوند. اجرای برنامه در اولین دستور بعد از دستور catch پایانی از سر گرفته می شود. بنابراین، دستور catch تنها در صورتی اجرا می شود که یک استثنا پرتاب شود.

بیایید به مثالی نگاه کنیم که در آن استثنایی را که هنگام تقسیم یک عدد بر 0 رخ می دهد، بررسی می کنیم:

استفاده از سیستم؛ با استفاده از System.Collections.Generic. با استفاده از System.Linq؛ با استفاده از System.Text. namespace ConsoleApplication1 ( class Program ( static int MyDel(int x, int y) ( return x / y; ) static void Main() ( try (Console.Write("Enter x:"); int x = int.Parse(Console .ReadLine())؛ Console.Write("y:")؛ int y = int.Parse(Console.ReadLine())؛ int result = MyDel(x, y); Console.WriteLine("نتیجه:" + نتیجه); ) // رسیدگی به استثنایی که هنگام تقسیم بر صفر رخ می دهد (DivideByZeroException) ( Console.WriteLine("تقسیم بر 0 شناسایی شد!!!\n"); Main(); ) // رسیدگی به استثنا زمانی که یک عدد به اشتباه در حافظه کنسول وارد شده است (FormatException) ( Console.WriteLine("این یک عدد نیست!!!\n"); Main(); ) Console.ReadLine(); ) )

این مثال ساده به وضوح مدیریت یک استثنا را هنگام تقسیم بر 0 (DivideByZeroException) و همچنین خطای کاربر هنگام وارد کردن یک غیر عدد (FormatException) را نشان می دهد.

عواقب نگرفتن استثنائات

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

یک استثنا نمونه ای از یک کلاس است که به طور صریح و ضمنی از کلاس پایه System.Exception به ارث برده شده است.

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

هنگامی که با یک خطا مواجه می شوید، کد یک استثنا می اندازد (یک نمونه از کلاس استثنا ایجاد می کند) و آن را به صورت زیر پرتاب می کند:

پرتاب جدید IndexOutOfRangeException ("شما وارد کردید: " + userInput);

به محض اینکه کامپایلر در داخل یک بلوک try با دستور drop روبرو می شود، بلافاصله به دنبال بلوک catch مربوطه می گردد.

دستورات Throw لازم نیست در همان روش بلوک try باشند، بلوک try حتی زمانی که کنترل به روش‌های دیگر منتقل شود به کار خود ادامه می‌دهد.

دستور throw می تواند در هر روشی باشد که در طول اجرای بلوک try فراخوانی می شود - لازم نیست در همان روشی باشد که بلوک try در آن تعریف شده است.

کنترل کننده های استثنا برای کلاس مشتق شده (IndexOutOfRangeException) باید قبل از دسته پایه (Exception) قرار بگیرند (!)

اگر catch handler به صورت: catch (...) نوشته شود، این بدان معناست که مسئول هر کدی است (برای هر استثنایی که رخ دهد)، از جمله کدهایی که در C# نوشته نشده اند یا مدیریت نشده اند.

اینکه فقط نمونه‌هایی از یک کلاس مشتق شده از System.Exception را می‌توان به عنوان استثنا ارسال کرد، یک الزام C# است.

در حالی که (درست) // چرخه بی پایان( Console.Write("یک آیتم منو را از 0 تا 5 انتخاب کنید یا برای خروج:"؛ رشته userInput = Console.ReadLine(); if (userInput == "") (Console.WriteLine("شما برای خروج کلیک کردید.. . ")؛ break; ) try (int x = int.Parse(userInput)؛ سوئیچ (x) (مورد 0: Console.WriteLine("مورد 0 انتخاب شده است")؛ شکست؛ مورد 1: Console.WriteLine("مورد" 1 انتخاب شده است ")؛ شکست؛ مورد 2: Console.WriteLine ("مورد 2 انتخاب شده")؛ شکست؛ مورد 3: Console.WriteLine ("مورد 3 انتخاب شده")؛ شکست؛ مورد 4: Console.WriteLine ("مورد 4" انتخاب شده")؛ شکست؛ مورد 5: Console.WriteLine("مورد 5 انتخاب شد"؛ شکست؛ پیش‌فرض: پرتاب جدید IndexOutOfRangeException(); break;) ) catch (IndexOutOfRangeException e) (Console.WriteLine("مقدار نامعتبر. انتخاب کنید. رقم از ") ؛ ) catch (FormatException e) ( Console.WriteLine ("خطای تبدیل، ممکن است رشته ای را وارد کرده باشید...")؛ ) catch (Exception e) ( Console.WriteLine("خطای دیگری")؛ ) catch () // handler برای کد مدیریت نشده و کد به زبان دیگر )

ویژگی ها و روش های سیستم.استثنا

اگر (ErrorCondition == درست) (Exception myException = جدید ClassMyException ("Help!")؛ myException.Source = "Application Name"؛ myException.HelpLink = "myHelpFile.txt"؛ myException را پرتاب کنید؛ )

کد نیازی به پرتاب استثنا از کلاس عمومی System.Exception ندارد - ایده ای از ماهیت حالت خطا (!) ارائه نمی دهد. دو طبقه مهم در سلسله مراتب وجود دارد:

SystemException - برای استثناهایی که معمولاً توسط زمان اجرا دات نت ایجاد می شوند، یا استثناهایی با ماهیت کلی طراحی شده است و تقریباً توسط هر برنامه ای قابل اجراست. زیر کلاس خطاهای کشنده و غیر کشنده را نشان می دهد.

ApplicationException - پایه ای است که برای هر طبقه ای از استثنائات تعریف شده توسط اشخاص ثالث در نظر گرفته شده است.

IOException (Namspace System.IO) با خواندن و نوشتن داده ها در یک فایل مرتبط است.

یک StackOverflowException زمانی رخ می دهد که فضای پشته به اندازه ظرفیت پر شود. سرریز پشته می تواند رخ دهد، برای مثال، زمانی که یک متد شروع به فراخوانی بازگشتی خود می کند. یکی از دلایل رایج EndOfStreamException، تلاش برای خواندن فراتر از مرزهای یک فایل است. یک OverflowException پرتاب می‌شود، برای مثال، زمانی که سعی می‌کنید یک int حاوی -40 را به یک uint در یک زمینه علامت‌گذاری شده ارسال کنید.

دردهای آزمایشی تودرتو به دو دلیل استفاده می شوند:

- به منظور تغییر نوع استثنای تولید شده (با استفاده از ویژگی InnerException که حاوی پیوندی به هر استثنای تولید شده است)؛

- مدیریت استثناهای مختلف در بخش های مختلف کد.

تعریف کلاس های استثنای خود

تعریف استثناهای خود کار نسبتاً ساده ای است. شما به ندرت نیاز دارید که روش های خود را به آنها اضافه کنید. فقط برای اطمینان از اینکه سازنده کلاس پایه به درستی فراخوانی شده است، سازنده را پیاده سازی کرد.

کلاس LandLineSpyFoundException: ApplicationException ( عمومی LandLineSpyFoundException(string spyName): base("spy"+spyName) () public LandLineSpyFoundException(string spyName, Exception innerException): base(spyName)x)

روز خوب! امروز در مورد نحوه رسیدگی به خطاها در برنامه های نوشته شده در سی شارپ صحبت خواهیم کرد.

می خواهم فوراً متذکر شوم که خطاهای برنامه ها را می توان به طور مشروط به دو گروه تقسیم کرد: خطاهای زمان ساخت برنامه (در مرحله کامپایل) و خطاهای زمان اجرای برنامه. در این آموزش در مورد خطاهای زمان اجرا صحبت خواهیم کرد!

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

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

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

( //بلوک کد بالقوه خطرناک )catch(error_type) ( //Error handling ) //بیشتر عبارات برنامه را امتحان کنید

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

در عمل، پس از یک بلوک تلاش كردن، ممکن است چندین بلوک وجود داشته باشد گرفتن، برای رسیدگی به انواع مختلف خطاها به طور جداگانه.

بیایید کد برنامه را از درس قبلی تغییر دهیم، کنترل و مدیریت خطا را اضافه کنیم که ممکن است هنگام وارد کردن داده های نادرست توسط کاربر رخ دهد.

//بلوک آزمایش بالقوه خطرناک ( //دعوت از کاربر برای وارد کردن شماره اول Console.Write("اولین شماره را وارد کنید و فشار دهید کلید ورود: ")؛ //دریافت اولین رشته رشته firstString = Console.ReadLine()؛ //تبدیل رشته اول به عدد int firstArg = Convert.ToInt32(firstString)؛ //از کاربر درخواست می کند تا کنسول شماره دوم را وارد کند. Write("شماره اول را وارد کنید و Enter را فشار دهید: ")؛ // رشته رشته دوم را دریافت کنید secondString = Console.ReadLine()؛ // رشته دوم را به عدد تبدیل کنید int secondArg = Convert.ToInt32(secondString); // اضافه کردن دو متغیر int result = firstArg + secondArg ; // خروجی نتیجه Console.WriteLine("نتیجه اضافه کردن اعداد وارد شده: " + result.ToString())؛ ) //بلوک رسیدگی به خطا، SystemException - رایج ترین نوع از catch خطا (SystemException) ( Console.WriteLine ("در حین اجرای برنامه با خطا مواجه شد، احتمالاً داده های نادرستی وارد شده است!")؛ )

حال اگر کاربر به جای عدد صحیح، داده های نادرست وارد کند، خطای رخ داده پردازش می شود. اگر این کد را در " اصلی"، با ساخت و اجرای برنامه، رفتار زیر را مشاهده خواهید کرد:

و بنابراین، در این درس ارائه شد اطلاعات اولیهدر مورد مکانیسم رسیدگی به خطا (موقعیت های استثنایی) در زبان سی شارپ. در درس بعدی در مورد ایجاد و استفاده از روش ها (توابع) خودمان صحبت خواهیم کرد و بیش از یک بار به مبحث رسیدگی به خطاها برمی گردیم!

برترین مقالات مرتبط