មេរៀន VC#.NET-Error និង Exception

មេរៀន VC#.NET-Error និង Exception
នុងជំពូកនេះរៀនពីរបៀប  :
-ប្រើបណ្តាកន្សោម try, catch និង finally ដើម្បីគ្រប់គ្រង exceptions
-ប្រើពាក្យ Control checked និង unchecked keywords ។
- បញ្ចូល exceptions ពីក្នុងកម្មសិទ្ធិ methods ដែលប្រើ keyword.
-exceptions ក្នុង Microsoft Visual Studio .NET debugger។
1. Coping ជាមួយ Error
នៅពេលហៅ method មួយអ្នកឆែកមើលអថេរទាំងអស់ ដើម្បីមើលថា តើ method failed ឬយ៉ាងណា? ដំណោះស្រាយគឺមានការលំបាកព្រោះមាន ហេតុផលដូចខាងក្រោមនេះ:
· កម្មវិធី logic ចម្បងដែលប្រទាក់គ្នាជាមួយឆ្លាស់ code គ្នាដើម្បីឆែក errors ។ កម្មវិធីមានការលំបាកយល់ ។
· ត្រួតពិនិត្យ error ការប្រើ code គឺជាប្រភេទដដែលៗនិងអាចមាន ភាពងាយស្រួលបង្កើតទំហំ size នៃកម្មវិធីកម្មវិធីធំមានការលំបាកខ្លាំង harder ក្នុងការស្វែងយល់ពីកម្មវិធីតូចៗ ។
· គ្រប់ methods ទាំងអស់មានការយល់ព្រមលើបង្កើតអថេរទាំងអស់ ទៅតំលៃដែលមិនប្រើក្នុង method ផ្សេងទៀត ។
2. អនុវត្ត Code និងការចាប់ Exception
គំនិតក្នុងការដំណើរការនៅក្នុង exception គឺជា code ដែលអនុវត្តជាចម្បងនៃកម្មវិធីពីក្នុង error code ។ កាលណាពីផ្នែកត្រូវបាន
បែងចែក ។ ដើម្បីសរសេរកម្មវិធី exception-aware អ្នកត្រូវការពីរបញ្ហាទីមួយ
សរសេរ code នៅក្នុង try block (try គឺជា keyword) ។
ទីពីរអ្នកសរសេរ catch មួយឬច្រើន (catch គឺជា keyword) ។ ប្រសិនបើមួយនៃ statements នៅក្នុង try block ដែលបង្កើតនៅក្នុង exception តាមធម្មតា left-to-right, top-to-bottom នៃកម្មវិធីគែ halts, និងការត្រួតពិនិត្យការបញ្ជួនដោយផ្ទាល់ catch ។
try
{
int leftHandSide = Int32.Parse(leftHandSideOperand.Text);
int rightHandSide = Int32.Parse(rightHandSideOperand.Text);
int answer = doCalculation(leftHandSide, rightHandSide);
result.Text = answer.ToString();
}
catch (FormatException fEx)
{
// Handle the exception

}
វិធី System.Int32.Parse method ព្យាយាមដើម្បីប្តូរវាក្នុង string argument ទៅក្នុងចំនួនគត់ integer ។ ឧទាហរណ៍ “99″ គឺត្រូវបានប្តូរ ទៅក្នុង 99 ។ អ្វីដែលអ្នកនឹងមាន System.Int32.Parse ត្រឡប់មកវិញកាលណាផ្ញើ string ក្នុង format ដែលខុសដូចជា “Tommy Trewblew” ចំលើយគឺមិន ត្រឹមត្រូវ ។ អ្វីក៏ដោយតំលៃវាត្រឡប់ (-1 ជាឧទាហរណ៍) ។
a3. ប្រើប្រាស់ Multiple catch
តាមពិតភាពខុសគ្នា errors បោះចោលពីភាពខុសគ្នាប្រភេទនៃ exceptions ដើម្បីបង្ហាញពីប្រភេទខុសគ្នាការបរាជ័យ failure ។ ឧទាហរណ៍ សន្មតថាប្រើ  method ដែលហៅថាការគណនាដែលអាចបោះចោល
DivideByZeroException ។ ដើម្បី demo បញ្ហានេះអ្នកអាចសរសេរ catch handler ជាប់គ្នាដូចខាងក្រោមនេះ:
try
{
int leftHandSide = Int32.Parse(leftHandSideOperand.Text);
int rightHandSide = Int32.Parse(rightHandSideOperand.Text);
int answer = doCalculation(leftHandSide, rightHandSide);
result.Text = answer.ToString();
}
catch (FormatException fEx)
{
//…
}
catch (OverflowException oEx)
{
//…
}
4. សរសេរ catch Handler ជាទូទៅ
ជាទូទៅ catch Handler វាទទួលដំណើរការបានល្អប្រសើរ ។ ប្រសិន
បើអ្នកមិនចង់សរសេរ catch handler ដែលមានលក្ខណ:ពិសេសដោយឡែក
ខុសគ្នាពីប្រភេទនៃ​ exception (ប៉ុន្តែមិនមានការធុញទ្រាន់ពីព្រោះវាមាន
ប្រភេទខុសគ្នានៃ exceptions) អ្នកអាចសរសេរ catch handler មួយដែល នឹង catch exception ។
try
{
int leftHandSide = Int32.Parse(leftHandSideOperand.Text);
int rightHandSide = Int32.Parse(rightHandSideOperand.Text);
int answer = doCalculation(leftHandSide, rightHandSide);
result.Text = answer.ToString();
}
catch (Exception ex) // this is a general catch handler
{
//…
}
មាន syntax មួយផ្លាស់ប្តូរ catch handler ជាទូទៅគឺ catch { … } ក្នុងករណីនេះអ្នកមិនត្រូវការប្រភេទ exception ។
ប្រសិនបើលោកអ្នករត់ដំណើរការក្នុង Debug ពេលនោះបានជួបបញ្ហា occur លោកអ្នកចាប់ផ្តើមជាមួយ Start Without Debugging។
aចុចលើពិស្តារ Details ក្នុងប្រអប់ Exception dialog ដើម្បីបង្ហាញព័ត៌មាន
aជោគជ័យក្នុងដំណើរការ FormatException
សរសេរ try/catch statement
1. ចាប់ផ្តើម Start Visual Studio .NET ។
2. បើក MathsOperators project ដែលមានទីតាំងក្នុង \Microsoft Press\Visual C# Step By Step\Chapter 6\MathsOperators folder នៅក្នុង My Documents folder របស់អ្នក ។
2. បើក MathsOperators project ។ មុនពេលរត់កម្មវិធីប្រើប្រាស់ ដំបូងអ្នកនឹងបង្កើត Exception settings ឡើងវិញនៃ Visual Studio ដូច្នេះ debugger មិនធ្វើ automatically ចាប់ផ្តើមកាលណា exception ត្រូវបានបោះចោល ។
3. នៅលើ Debug menu ចុចលើ Exceptions ។ បើកប្រអប់ Exceptions dialog box ។
a4. ក្នុង  Exception list ជ្រើសរើស Common Language Runtime Exceptions category ។
5. កាលណា Exception ត្រូវបានបោះចោល ជ្រើសរើស Continue ។
6. ក្រោម If The Exception Is Not Handled ជ្រើសរើស Continue.
7. ចុចលើ OK ។ ប្រអប់ Exceptions dialog box បានបិទ ។
8. លើ Debug menu ចុច Star ។ ឬប្រើ shortcut key សំរាប់ចាប់ ផ្តើម Start គឺចុចលើ F5 ។ កម្មវិធី Visual Studio .NET សង់បង្កើត
ឡើងនិងរត់ដំណើរការ Windows application ។ Exceptions Form បង្ហាញឡើង ។
a9. បញ្ចូលឈ្មោះ Enter John ក្នុងប្រអប់ខាងឆ្វេងដៃ Left Operand text box រួចហើយចុចលើ Calculate ។ កម្មវិធីប្រើប្រាស់ shuts down រួចហើយអ្នកត្រឡប់ទៅកម្មវិធី Visual Studio .NET programming ។ ពេល error ក្នុង text ដែលអ្នកបញ្ចូលក្នុងប្រអប់ ខាងឆ្វេងដៃ Operand text box បណ្តាលអោយមានមូលហេតុជាមួយ
កម្មវិធីប្រើប្រាស់បរាជ័យ fail ។ អាច message វិនិច្ឆ័យក្នុង Output window ។ អ្នកនឹងឃើញចំនួននៃ messages អំពី DLLs ចាប់ផ្តើម បញ្ចូលដោយ runtime ។ ខាងក្រោមនេះអ្នកនឹងឃើញ messages:
An unhandled exception of type ‘System.FormatException’
occurred in mscorlib.dll
Additional information: Input string was not in a correct format.
Unhandled Exception: System.FormatException:Input string was
not in a correct format.
at System.Number.ParseInt32(String s, NumberStyles style,
NumberFormatInfo info)
at Methods.Form1.calculate_Click(Object C:\Visual C# Step By Step\Chapter 6\MathsOperators\Form1.cs:line 257
ពីក្នុង text នេះអ្នកអាចស្រាវជ្រាវ exception ត្រូវបានបោះចោលដែល  ហៅទៅ System.Int32.Parse ក្នុង calculate_Click method ។
10. បន្ថែម try block ដែលរួមមាន 4 statements ក្នុង calculate_Click method ជាក់ស្តែងដូចខាងក្រោមនេះ:
try
{
int lhs = System.Int32.Parse(lhsOperand.Text);
int rhs = System.Int32.Parse(rhsOperand.Text);
int answer = doCalculation(lhs,? rhs);
result.Text = answer.ToString();
}
Add a catch block after this new try block, exactly as? follows:
catch (System.FormatException? caught)
{
result.Text = caught.Message;
}
10. catch handler នេះចាប់យក FormatException thrown ដោយ System.Int32.Parse រួចហើយសរសេរ Message property របស់វាទៅក្នុង Text property នៃប្រអប់លទ្ធផល text box នៅខាង ក្រោមនៃ form ។
11. នៅលើ Debug menu ចុចលើ Start ចូល Visual Studio .NET សង់បង្កើតឡើងវិញរួចរត់ដំណើរការកម្មវិធីប្រើប្រាស់ ។ អ្នកនឹងបញ្ចូល វាឥឡូវនេះដែលមានតំលៃដូចគ្នាដែលបណ្តាលកម្មវិធីប្រើប្រាស់ fail ។ 12. វាយសរសេរ John ក្នុងប្រអប់ខាងឆ្វេងដៃ Operand text box រួច ចុចលើ Calculate ។  ពេលនោះ catch handler ជោគជ័យ
បានចាប់យក FormatException និងផ្ញើ message “Input string was not in a correct format.” ត្រូវបានសរសេរទៅក្នុងប្រអប់ Result text box ។
a
13. ចុចលើ Quit ។ អ្នកត្រឡប់ទៅក្នុងកម្មវិធី Visual Studio .NET ។
5. ប្រើប្រាស់ Checked និង Unchecked
ក្នុងជំពូកទី2ខាងលើអ្នកបានរៀនពីរបៀបប្រើប្រមាណវិធី binary arithmetic ដូចជា + និង * លើប្រភេទ data types ដូចជា int និង double ។
អ្នកបានឃើញប្រភេទ data ដើមកំណើតដែលមានទំហំមិនប្រែប្រួល ។ ឧទាហរណ៍  C# int គឺជាចំនួនពិត 32 bits ។ ព្រោះ int មានទំហំមិនប្រែប្រួល
អ្នកដឹងច្បាស់ពីចំនួនគត់ integer គឺ-232 ទៅ 232-1 ។ ប្រសិនបើអ្នកសំរេច បង្កើតតំលៃ minimum ឬ maximum value នៃ int ក្នុង code អ្នកអាចប្រើ System.Int32.MinValue ឬ System.Int32.MaxValue fields ។
សរសេរ checked Statement
checked statement គឺជាបណ្តុំនៅខាងមុខជាមួយ checked keyword ។ ទាំងអស់គឺជាចំនួនគត់ integer arithmetic ក្នុង checked
statement បោះចោល OverflowException ដែលបង្ហាញដូចក្នុងឧទាហរណ៍
ខាងក្រោមនេះ:
int number = System.Int32.MaxValue;
checked
{
int willThrow = number++;
Console.WriteLine(“this won’t be reached”);
}
ចំនួនគត់ integer arithmetic មានក្នុងបណ្តុំ checked blockគឺជា checked ។ ឧទាហរណ៍ ប្រសិនបើមួយនៃ checked statements គឺហៅ method ។
អ្នកអាចប្រើ unchecked keyword បានផងដែរដើម្បីបង្កើតបណ្តុំ unchecked block statement. ចំនួនគត់ទាំងអស់នៅក្នុងបណ្តុំ unchecked គឺមិនមែនជា checked ឧទាហរណ៍:
int number = System.Int32.MaxValue;
unchecked
{
int wontThrow = number++;
Console.WriteLine(“this will be reached”);
}
សរសេរកន្សោម Checked Expression
អ្នកអាចប្រើ checked និង unchecked keywords បានផងដែរ ដើម្បីត្រួតពិនិត្យលើកន្សោម integer expressions ដែលនៅពីមុខកន្សោម សញ្ញាវង់ក្រចកជាមួយ checked ឬ unchecked keyword​ ដូចដែលបង្ហាញ ក្នុងឧទាហរណ៍នេះ:
int wontThrow = unchecked(System.Int32.MaxValue+1);
int willThrow = checked(System.Int32.MaxValue+1);
ប្រមាណវិធី compound ដូចជា += និង -= និងប្រមាណវិធីបង្កើន  (++) និងបញ្ចុះ (–) គឺជាប្រមាណវិធីអាចត្រួតពិនិត្យដែលប្រើ checked និង unchecked keywords ។ ចាំថា x += y; គឺដូចជា x = x + y; ។
ប្រើកន្សោម checked expression
1. នៅលើ Debug menu ចុចលើ Exceptions ។ ប្រអប់ Exceptions dialog box បើកចេញ ។
2. ជ្រើសរើស Common Language Runtime Exceptions ។
3. កាលណា Exception ត្រូវបានបោះចោល ជ្រើសរើស Continue ។
4. ក្រោម If The Exception Is Not Handled ជ្រើសរើស Break Into The Debugger រួចចុលើ click OK ។
5. លើ Debug menu ចុចលើ Start. Visual Studio .NET សង់បង្កើត រួតរត់ដំណើរការ Windows application ។
6. វាយសរសេរ 9876543 ក្នុងប្រអប់ខាងឆ្វេងដៃ Operand text box, វាយសរសេរ 9876543 ក្នុងប្រអប់ខាងស្តាំដៃ Right Operand text box ។ ជ្រើសរើស Multiplication option ក្រោមប្រមាណវិធី រួចចុច
លើ Calculate ។  តំលៃ -1195595903 បង្ហាញក្នុងប្រអប់ Result text box លើ form ។
7. ក្នុង Quit អ្នកត្រឡប់ទៅក្នុងកម្មវីធី Visual Studio .NET ។
8. ក្នុងសន្លឹក Code ទីតាំងតំលៃជាច្រើន method:
private int multiplyValues(int lhs, int rhs)
{
expression.Text = lhs.ToString() + ” * ” + rhs.ToString();
return? lhs * rhs;
}
9. Edit ត្រឡប់ statement ដែលត្រឡប់ទៅតំលៃគឺ checked ។ តំលៃច្រើន multiplyValues method និងមើលឃើញដូចខាងក្រោម:
private int multiplyValues(int lhs, int rhs)
{
expression.Text = lhs.ToString() + ” * ” + rhs.ToString();
return checked(lhs * rhs);
}
9. ឥឡូវនេះជ្រើសរើស checked រួចបោះចោលOverflowException
10. នៅលើ Debug menu ចុចលើ Start ចូលក្នុង Visual Studio .NET​ សង់បង្កើតរួចរត់ដំណើរការ Windows application ។
11. វាយសរសេរ 9876543 ក្នុងប្រអប់ខាងឆ្េវង Left Operand text box វាយសរសេរ 9876543 ក្នុងប្រអប់ខាងស្តាំដៃ Right Operand text box ជ្រើសរើស Multiplication option ក្រោមប្រមាណវិធីរួចចុច
លើ Calculate ។ អ្នកត្រឡប់ចូលទៅកម្មវិធី Visual Studio .NET និង ឃើញ message box បង្ហាញ ។ ក្នុង message ប្រាប់អោយអ្នកដឹង statement ក្នុង code ត្រូវបានបោះចោល OverflowException ។
a12. ចុចលើ Break ។ ប្រអប់ message box បានបិទ អ្នកឥឡូវមើល code Code ក្នុង debug mode ។
debug line គឺទៅខាងឆ្វេងដៃនៃ return statement ក្នុងតំលៃ
multiplyValues method:
return checked(lhs * rhs);
ធ្វើចលនាក្នុង cursor លើអថេរ rhs ក្នុង statement ។ បង្ហាញប្រាប់ តំលៃនៃ rhs គឺជា 9876543 ។
13. នៅលើ Debug menu ចុចលើ Stop Debugging ។ ប្រសិនបើ
សន្លឹក Debug window ត្រូវបានបើក អ្នកអាចចុចលើប៊ូតុង
Stop Debugging ។
14. ក្នុងសន្លឹក Code window ទីតាំង calculate_Click method។
15. បន្ថែម catch handler ភ្លាមៗនោះបន្ទាប់ពីមានរួចស្រេច catch handler ក្នុង calculate_Click method:
catch(System.OverflowException caught)
{
result.Text = caught.Message;
}
16. នៅលើ Debug menu ចុចលើ Start ចាប់ផ្តើម Visual Studio .NET សង់បង្កើតឡើងវិញរួចរត់សន្លឹក Windows application ។
17. វាយសរសេរ 9876543 ក្នុងប្រអប់ Left Operand text box វាយសរសេរ 9876543 ក្នុងប្រអប់ Right Operand text box
ជ្រើសរើស Multiplication option ក្រោមប្រមាណវិធីរួចុចលើ Calculate ។ ទីពីរ catch handler ជោគជ័យចាប់លើ OverflowException និង debugger មិនចាប់ផ្តើម ។ ពេលនោះ message ត្រូវបានសរសេរបង្ហាញក្នុងប្រអប់លទ្ធផល Result text box ។aa6. ​បន្ថែម Exception
សន្មតថាអ្នកកំពុងអនុវត្ត method ដែលហៅថា monthName ដែលព្រមទទួល int argument និងត្រឡប់ទៅឈ្មោះ name ត្រូវគ្នាទៅ month ។ ឧទាហរណ៍ monthName(1) នឹងត្រឡប់ “January”: អ្វីជា method return កាលណាចំនួន integer argument តូចជា 1 ឬធំជាង12 ។ ឈ្មោះ name នៃ ខែ month -16 ឬ month 1356 ។ ក្នុងរយះពេលជាយូរអ្នកនឹងរកមើលថ្នាក់នឹង
ពិណ៌នាពីលក្ខណ:ហើយអ្នកអាចប្រើវា (ប្រសិនបើមិនមាន អ្នកអាចបង្កើតវា ដោយងាយជាកម្មសិទ្ធិ exception class ប៉ុន្តែអ្នកត្រូវការស្គាល់ពីអ្វីដែលអាចធ្វើបាន ។ ក្នុងករណីនេះ .NET Framework System.Argumentout of
RangeException class គឺត្រឹមត្រូវ:
public static string monthName(int month)
{
switch (month)
{
case 1 :
return “January”;
case? 2 :
return “February”;
case 12 :
return “December”;
default :
throw new System.ArgumentOutOfRange
Exception(“Bad month”);
}
បន្ទាប់មក statement គឺជាឧទាហរណ៍នៃ throw statement:
throw new System.ArgumentOutOfRange
Exception(“Bad month”);
throw statement មានពីរផ្នែក ។ ទីមួយផ្នែកក្នុង throw keyword ។  អ្នកប្រើ throw keyword ដើម្បីលុបចោល exception object ។ throw keyword គឺជាឈ្មោះ well-named ។ ផ្នែកទីពីរគឺជាដែលអ្នកកំពុងលុប។ ក្នុង ឧទាហរណ៍នេះប្រើកន្សោមដែលបង្កើត object ថ្មី ។ កន្សោមបន្ទាប់គឺជាផ្នែក ដែលបង្កើត ArgumentOutOfRange (ដែលនៅក្នុង System namespace) មានផ្ទុក message “Bad month”:
new System.ArgumentOutOfRangeException
(“Bad month”)
ឧទាហរណ៍នេះគឺជា method ដែលមាននិយាយច្បាស់លាស់ក្នុង ជំពូកទី 7 ។ Throw ជាកម្មសិទ្ធ exception របស់អ្នក:
  1. នៅលើ Debug menu ចុចលើ Start ចូលក្នុង Visual Studio .NET រត់ដំណើរការកម្មវិធី Windows application ។
2. ចុចលើ Calculate មិនជ្រើសរើស option ប្រមាណវិធី
3. វាយសរសេរ 24 ក្នុងប្រអប់ឆ្វេងដៃ Operand text box សរសេរ 24 ក្នុង ប្រអប់ស្តាំដៃ Right Operand text រួចចុចលើ Calculate ។ វាយតំលៃ zero បង្ហាញក្នុងប្រអប់ Result text box ។
a

Related product you might see:

Share this product :

Post a Comment

 
Support : Creating Website | Johny Template | Mas Template
Copyright © 2011. ទឹកអំពៅ - All Rights Reserved
Template Created by Creating Website Published by Mas Template
Proudly powered by Blogger