خوش آمدید.
در این ویدیو چیزی واقعاً جالب برای شما دارم.
و آن هم استک فراخوانی و نحوه کار استثناها در استک فراخوانی است.
بنابراین یک مثال کوچک از کدی که از قبل آماده شده دارم.
و چند متد داریم.
بنابراین ما یک متد استاتیک به نام level one داریم که level two را فراخوانی می‌کند.
حالا واضح است که ممکن است کد بیشتری در اینجا وجود داشته باشد.
می‌تواند 15، 50، 100 خط کد باشد.
و در نهایت، در این مورد، واضح است که فقط داشتن یک متد که متد دیگری را فراخوانی کند بی‌فایده است.
اما معمولاً شما کد بیشتری در آن خواهید داشت.
بنابراین این فقط برای نمایش است.
حالا این متد level one متد level two را فراخوانی می‌کند.
و در داخل متد level two ما همچنین یک سری کد داریم، کد زیادی که فقط اجرا می‌شود و غیره.
اما سپس من یک استثنا در داخل level two پرتاب می‌کنم.
حالا در این مورد من به‌طور فعال آن را پرتاب می‌کنم تا کسی بتواند آن را مدیریت کند.
پس این کسی که هست؟
این کسی می‌تواند توسعه‌دهنده باشد.
بنابراین خطا به‌سادگی اتفاق می‌افتد.
برنامه من کرش می‌کند و من می‌دانم که خوب، یک خطا وجود دارد که باید بهتر مدیریت شود.
یا کسی در بالای استک وجود دارد که خطا را مدیریت می‌کند.
پس بالا رفتن از استک به چه معناست و چگونه می‌توان آن را مدیریت کرد؟
خوب، ما قبلاً دیدیم که وقتی می‌گوییم پرتاب، یک خطا به‌سادگی اتفاق می‌افتد.
برنامه ما کرش می‌کند.
اما این کاملاً درست نبود زیرا در مورد جدیدی که در اینجا داریم، ما سعی می‌کنیم
متد level one را اجرا کنیم، که سپس به نوبه خود متد level two را فراخوانی می‌کند، که سپس خطا را پرتاب می‌کند.
بنابراین ما سعی می‌کنیم چیزی را اجرا کنیم که واقعاً باعث خطا می‌شود.
اما سپس ما یک خطا را با یک استثنا می‌گیریم.
ما فقط چیزی را به کنسول می‌گوییم.
مثل این مورد که می‌گوییم Console.WriteLine استثنا در main فراخوانی شد.
و سپس فقط به ما پیام می‌دهد که خوب.
پس بیایید این را اجرا کنیم و ببینیم چه اتفاقی می‌افتد.
و می‌بینید که من این خطا را دریافت می‌کنم که می‌گوید استثنا در main گرفته شد.
چیزی اشتباه است اما برنامه من هنوز در حال کار است.
می‌توانم نشان دهم.
بنابراین برنامه هنوز در حال اجرا است.
و سپس بیایید این یکی را اینجا فراخوانی کنیم CW برنامه در حال اجرا قبل از بلوک try.
خوب، بیایید دوباره آن را اجرا کنیم و خواهیم دید که برنامه در حال اجرا قبل از بلوک try است.
و سپس استثنا در main فراخوانی می‌شود.
چیزی اشتباه است و سپس می‌گوید برنامه هنوز در حال اجرا است.
بنابراین آنچه می‌توانیم ببینیم این است که مدیریت خطا در بالای استک اتفاق می‌افتد.
بنابراین آنچه که ما انجام دادیم این است که مشکل خود را به بالای استک منتقل کردیم.
بنابراین در این مورد ما آن را از level two به level one منتقل کردیم.
و سپس level one آن را به متد main منتقل کرد که در آن بلوک try وجود داشت که سپس استثنا را مدیریت می‌کند.
این استثنای پرتاب شده.
بنابراین در مورد بسیار ساده‌ای که در اینجا داریم، ما تمام کد را می‌بینیم.
و ما کنترل بر روی کد داریم.
و می‌توانیم تمام کد را ویرایش کنیم.
اما در یک پروژه بزرگ که شما در حال ساخت آن هستید با افراد زیادی، مانند یک شرکت با ده‌ها توسعه‌دهنده
یا حتی فقط با دو توسعه‌دهنده، نه همه به تمام کد دسترسی دارند و نه
همه مسئول تمام کد هستند.
اما آنچه می‌توانید انجام دهید این است که فقط بگویید، هی، در این لحظه در کد، می‌خواهم یک خطا اتفاق بیفتد
چون چیزی اشتباه است.
چیزی درست نیست.
و اگر ما فقط به مراحل بعدی ادامه دهیم، ما پایگاه داده‌مان را خراب خواهیم کرد یا چیزی را خراب خواهیم کرد.
من خطا را پرتاب می‌کنم و حالا لطفاً بروید و خطا یا استثنا را مدیریت کنید.
استثنا را بگیرید، آن را مدیریت کنید یا نکنید.
اگر این کار را نکنید، برنامه کرش می‌کند.
اما اگر این کار را کنید، عالی است، پس برنامه کرش نخواهد کرد.
اما مدیریت استثنا، مدیریت استثنا در یک لایه دیگر در یک سطح بالاتر از استک اتفاق می‌افتد.
خوب، پس این چگونه کار می‌کند؟
خوب، وقتی ما یک استثنا پرتاب می‌کنیم، کد درون یک متد استثنا را پرتاب می‌کند و زمان اجرا
سپس شروع به جستجوی متدی می‌کند که می‌تواند استثنا را مدیریت کند.
در این مورد ما آن را دیدیم.
متد main می‌تواند استثنا را مدیریت کند زیرا این همان چیزی است که بلوک try بود، درست است؟
نگاه کردن به بالای استک فراخوانی از نقطه‌ای که استثنا پرتاب شده است، که در سطح ما است.
بنابراین اگر خطایی اتفاق بیفتد، بیایید واقعاً این را کمی بیشتر اجرا کنیم.
بنابراین من یک خط اینجا اضافه می‌کنم تا بهتر بفهمیم.
شما می‌توانید ببینید که این خط قبلاً خاکستری شده است زیرا می‌گوید این خط هرگز اجرا نخواهد شد.
حتی زحمت نکشید.
اما می‌توانم چیزی مانند level two بعد از پرتاب بگویم.
خوب، بنابراین اجازه دهید به شما نشان دهم که level two قبل از پرتاب و بعد از پرتاب اجرا خواهد شد.
بنابراین اجازه دهید این را اجرا کنیم و می‌توانیم ببینیم که برنامه در حال اجرا قبل از بلوک try است، level two قبل از پرتاب سپس.
استثنا فراخوانی می‌شود و برنامه هنوز در حال اجرا است.
بنابراین می‌بینید، این پرتاب باعث کرش برنامه ما نشد، اما به‌طور پیش‌دستانه متد خود را ترک کرد.
بنابراین متد level two فقط گفت، هی، می‌دانی چه، متد level two، تو قادر به مدیریت یا
مدیریت استثنای من نیستی.
پس لطفاً آن را به بالادستی‌های خود بده.
به level one بده.
Level one می‌گوید، می‌دانی چه، این مشکل من نیست.
من آن را به رئیس می‌دهم.
متد main.
متد main می‌گوید، خوب، می‌دانی چه، level one، من خطای تو را مدیریت می‌کنم حتی اگر این
خطای level two باشد.
اما بله، اینگونه است که کل فرآیند بالا رفتن کار می‌کند.
بنابراین واقعاً به دنبال یک مدیریت‌کننده است.
بنابراین کسی که سعی در مدیریت یا کسی که می‌تواند خطا را مدیریت کند و سپس استثنا را مدیریت می‌کند.
و اگر نتواند استثنا را مدیریت کند.
بنابراین اگر این بلوک catch استثنای صحیح را نداشته باشد، در مورد ما ما یک استثنای پیش‌فرض داریم
که تمام استثناها را می‌گیرد.
اما اگر این مانند یک استثنای آرگومان باشد، اما ما چیزی دیگر مانند یک استثنای تقسیم بر صفر را پرتاب کنیم، به عنوان مثال.
بنابراین در این مورد ممکن است کار نکند.
خوب.
بنابراین این فقط یک مثال است از اینکه چگونه استک فراخوانی کار می‌کند به این معنا که یک متد متد دیگری را فراخوانی می‌کند
متد دیگری را فراخوانی می‌کند.
و این غیرمعمول نیست، درست است؟
این اتفاق می‌افتد هر زمان که ما از یک متد استفاده می‌کنیم.
ما می‌بینیم که هر متدی که ما فراخوانی می‌کنیم از متد main فراخوانی می‌شود، که در حال حاضر شروع به
ساختن استک می‌کند.
بنابراین اگر متدی که ما در متد main فراخوانی می‌کنیم متد دیگری را فراخوانی کند، آنگاه استک ما
یک بار دیگر افزایش می‌یابد و غیره.
خوب.
بنابراین این فقط یک مثال کوچک بود.
امیدوارم از آن لذت برده باشید.
این برای نشان دادن نحوه کار استک است، اینکه چگونه می‌توانید خطا یا استثنای خود را به سطحی منتقل کنید
که می‌تواند مدیریت شود یا مدیریت نشود، و سپس برنامه کرش خواهد کرد.
خوب.
بنابراین این برای این ویدیو است، به هر حال.
بیایید فقط به سرعت آن را ثابت کنیم، خوب؟
بنابراین بگویید من فقط استثنای تقسیم بر صفر را می‌پذیرم یا استثنای تقسیم بر صفر را مدیریت می‌کنم.
بنابراین اگر من این برنامه را اکنون اجرا کنم، کرش خواهد کرد.
بنابراین می‌گوید برنامه در حال اجرا قبل از بلوک try، level two قبل از پرتاب.
و سپس بعد از آن هیچ کاری نمی‌کند.
بنابراین فقط به ما این استثنای سیستم را می‌دهد.
چیزی اشتباه است.
بنابراین این همچنین به شما نشان می‌دهد که شما می‌توانید.
و اجازه دهید این را به یک استثنای پیش‌فرض تبدیل کنم.
دوباره والد می‌داند چگونه فرزندان را مدیریت کند، اما فرزندان نمی‌دانند چگونه والد را مدیریت کنند
به طرز جالبی.
درست است؟
بنابراین استثنا والد است و تقسیم بر صفر فرزند است.
درست است؟
بنابراین اگر من سعی کنم به عنوان تقسیم بر صفر سعی کنم والد استثنا را مدیریت کنم، کار نمی‌کند.
اما اگر من سعی کنم یک استثنای فرمت اینجا داشته باشم، به عنوان مثال، آن کار خواهد کرد، خوب؟
بنابراین هنوز برنامه من کرش نخواهد کرد.
بنابراین هنوز برنامه را فراخوانی کرده است.
استثنا در main خوب.
بنابراین این مقدار زیادی اطلاعات بود.
نگران نباشید.
ما به طور قابل توجهی احساس بهتری از وراثت خواهیم داشت.
و ما موقعیت‌های خطای بیشتری خواهیم دید که ما آنها را می‌گیریم، سعی می‌کنیم و می‌گیریم و نهایی می‌کنیم،
به‌ویژه زمانی که به فصل‌های پایگاه داده و رابط کاربری می‌رسیم، زیرا هر زمان که
شما با یک رابط کاربری کار می‌کنید، چیزی می‌تواند اشتباه پیش برود زیرا کاربر می‌تواند هر کاری انجام دهد.
پس در ویدیو بعدی می‌بینمتان. ```