شاید شما از قبل بدانید که چه کلاس های انتزاعی در C#.NET وجود دارد. اگر نمی دانید، اجازه دهید یک معرفی مختصر به شما بدهم، یک کلاس انتزاعی در C#.NET کلاسی است که شامل متدهای اعلام شده اما تعریف نشده است – و شما آن متدها را در کلاس های فرزند آن کلاس انتزاعی تعریف می کنید. کلاس فرزند روش کلاس انتزاعی والد را لغو می کند و عملکرد متد را ارائه می دهد.
چه زمانی از کلاس انتزاعی استفاده کنیم؟
اجازه دهید یک سناریو پیش روی شما بگذارم، شما در حال ایجاد نرم افزار برای مدرسه هستید و دو کلاس دانش آموز و معلم دارید که در زیر مشاهده می کنید.
کلاس معلم
public int ID {
get;
set;
}
public string FirstName {
get;
set;
}
public string LastName {
get;
set;
}
public string Subject {
get;
set;
}
public int MonthlySalary {
get;
set;
}
public string GetFullName() {
return "Teacher " + this.FirstName + " " + this.LastName;
}
public void AnnualSalary() {
Console.WriteLine(MonthlySalary * 12);
}
}
کلاس دانشجویی
public int ID {
get;
set;
}
public string FirstName {
get;
set;
}
public string LastName {
get;
set;
}
public string Semester {
get;
set;
}
public string GetFullName() {
return "Student " + this.FirstName + " " + this.LastName;
}
public double GetPercentage(double ObtainMarks, double TotalMarks) {
double final_result = (ObtainMarks / TotalMarks) * 100;
return final_result;
}
}
حالا این دو کلاس چند چیز مشترک دارند
بنابراین معلم و دانشجو در ابتدا شخص هستند، بنابراین میتوانیم یک کلاس Person.cs ایجاد کنیم و ویژگیها و رفتارهای مشترک را در آنجا قرار دهیم.
Person.cs
public int ID {
get;
set;
}
public string FirstName {
get;
set;
}
public string LastName {
get;
set;
}
public virtual string GetFullName() {
throw new NotImplementedException();
}
}
توجه: ما ایجاد کردیم
به عنوان مجازی چون این روش را در کلاس های Teacher و Student به طور متفاوتی تعریف خواهیم کرد.
اکنون کل کد با Student، Teacher و Person به این شکل خواهد بود
public int ID {
get;
set;
}
public string FirstName {
get;
set;
}
public string LastName {
get;
set;
}
public virtual string GetFullName() {
throw new NotImplementedException();
}
}
//-------------------------------------------------------------------------
public class Teacher: Person {
public string Subject {
get;
set;
}
public int MonthlySalary {
get;
set;
}
public string GetFullName() {
return "Teacher " + this.FirstName + " " + this.LastName;
}
public void AnnualSalary() {
Console.WriteLine(MonthlySalary * 12);
}
}
//--------------------------------------------------------------------------
public class Student: Person {
public string Semester {
get;
set;
}
public string GetFullName() {
return "Student " + this.FirstName + " " + this.LastName;
}
public double GetPercentage(double ObtainMarks, double TotalMarks) {
double final_result = (ObtainMarks / TotalMarks) * 100;
return final_result;
}
}
مشکل در وراثت بدون کلاس انتزاعی: