در فصل های قبل با استثناهای درونی در زبان سی شارپ آشنا شدیم. اکنون میخواهیم خود یک استثنای سفارشی را ایجاد کنیم. در این فصل به ایجاد یک استثنای سفارشی خواهیم پرداخت.
Exception سفارشی
در قسمت های قبل کلاس های استثنای داخلی در سی شارپ را مشاهده کردیم. شما میتوانید با ارث بری از کلاس Exception
و یا ApplicationException
استثنای سفارشی مورد نظر خود را ایجاد کنید. کلاس ApplicationException از نسخه یک دات نت تاکنون موجود بوده است و از آن به عنوان کلاس پایه برای استثناها استفاده میشده است. با این حال مایکروسافت پیشنهاد میکند که از کلاس پایه Exception برای ایجاد استثناهای سفارشی خود استفاده کنید.
در نمونه مثال زیر در برنامه school کلاس استثنای InvalidStudentNameException
را ایجاد کرده ایم که اجازه نمیدهد کاراکترهای خاص و اعداد در نام دانش آموزان استفاده شود :
class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; }
}
[Serializable]
class InvalidStudentNameException : Exception
{
public InvalidStudentNameException()
{
}
public InvalidStudentNameException(string name)
: base(String.Format("Invalid Student Name: {0}", name))
{
}
}
اکنون میتوان در برنامه جایی که نام دانش آموز شامل کاراکترهای خاص و یا اعداد باشد از استثنای InvalidStudentNameException
استفاده کرد. برای این کار از کلمه کلیدی throw استفاده کنید :
class Program
{
static void Main(string[] args)
{
Student newStudent = null;
try
{
newStudent = new Student();
newStudent.StudentName = "James007";
ValidateStudent(newStudent);
}
catch(InvalidStudentNameException ex)
{
Console.WriteLine(ex.Message );
}
Console.ReadKey();
}
private static void ValidateStudent(Student std)
{
Regex regex = new Regex("^[a-zA-Z]+$");
if (!regex.IsMatch(std.StudentName))
throw new InvalidStudentNameException(std.StudentName);
}
}
خروجی نمونه مثال بالا به شکل زیر است :
Invalid Student Name: James000