English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
الإرث هو أحد أكثر المفاهيم أهمية في تصميم البرمجيات الموجهة للأ�체ة. يسمح الإرث لنا بتعريف فئة بناءً على فئة أخرى، مما يجعل إنشاء وتحسين التطبيقات أسهل. كما يساعد في إعادة استخدام الكود وتوفير وقت التطوير.
عند إنشاء فئة، لا يحتاج المبرمج إلى إعادة كتابة جميع العناصر الجديدة تمامًا والمكونات الجديدة، بل يكفي تصميم فئة جديدة، تورث الأعضاء من الفئة الموجودة. وتسمى هذه الفئةفئة الأصل، وتسمى هذه الفئة الجديدةفئة فرعية.
فكرة الإرث تم تحقيقها يتبع (IS-A) العلاقات. على سبيل المثال، الثدييات يتبع (IS-A) حيوان، الكلاب يتبع (IS-A) ثدييات، لذا الكلاب يتبع (IS-A) حيوان
يمكن للفئة أن تنشأ من عدة فئات أو واجهات، مما يعني أنها يمكن أن تنقل البيانات والوظائف من عدة فئات أو واجهات.
جملة إنشاء فئة فرعية في C# كالتالي:
<مؤشر_الوصول> class <فئة_الأصل>
{
}
class <فئة_فرعية> : <فئة_الأصل>
{
}
افترض، هناك فئة أصلية Shape، فئة فرعية لها هي Rectangle:
using System;
namespace InheritanceApplication
{
class Shape
{
public void setWidth(int w)
{
width = w;
}
public void setHeight(int h)
{
height = h;
}
protected int width;
protected int height;
}
// 派生类
class مستطيل: شكل
{
public int getArea()
{
return (width * height);
}
}
class RectangleTester
{
static void Main(string[] args)
{
Rectangle Rect = new Rectangle();
Rect.setWidth(5);
Rect.setHeight(7);
// طباعة مساحة العنصر
Console.WriteLine("المساحة الإجمالية: {0}", Rect.getArea());
Console.ReadKey();
}
}
}
عندما يتم تجميع وتنفيذ الكود أعلاه، سيتم توليد النتيجة التالية:
المساحة الإجمالية: 35
فإذا استمرت فئة فرعية في فئة الأصل، فإنه يجب أن يتم إنشاء عمود الأصل قبل إنشاء عمود الفرعية. يمكنك إجراء التدخل في قائمة التدخل في الأعضاء لتحديد الأصل.
برنامج التالي يوضح هذا النقطة:
using System;
namespace تطبيق_مستطيل
{
class مستطيل
{
// متغيرات_الأعضاء
protected double الطول;
protected double العرض;
public مستطيل(double l, double w)
{
الطول = l;
width = w;
}
public double الحصول_على_المساحة()
{
return الطول * العرض;
}
public void Display()
{
Console.WriteLine("طول: {0}", الطول);
Console.WriteLine("عرض: {0}", العرض);
Console.WriteLine("مساحة: {0}", الحصول_على_المساحة());
}
//end class مستطيل
class سطح الطاولة : مستطيل
{
private double تكلفة;
public Tabletop(double l, double w) : base(l, w)
{ }
public double GetCost()
{
double cost;
cost = GetArea() * 70;
return cost;
}
public void Display()
{
base.Display();
Console.WriteLine("تكلفة: {0}", GetCost());
}
}
class ExecuteRectangle
{
static void Main(string[] args)
{
Tabletop t = new Tabletop(4.5, 7.5);
t.Display();
Console.ReadLine();
}
}
}
عندما يتم تجميع وتنفيذ الكود أعلاه، سيتم توليد النتيجة التالية:
الطول: 4.5 العرض: 7.5 المساحة: 33.75 تكلفة: 2362.5
الوراثة المتعددة تعني أن الفئة يمكن أن تورث السلوكيات والخصائص من أكثر من فئة واحدة في نفس الوقت. في مقابل الوراثة الواحدة، الوراثة الواحدة تعني أن الفئة يمكن أن تورث من فئة واحدة فقط.
C# لا يدعم الوراثة المتعددةلكن يمكنك استخدام واجهة لتحقيق الوراثة المتعددة. البرنامج التالي يوضح هذا النقطة:
using System;
namespace InheritanceApplication
{
class Shape
{
public void setWidth(int w)
{
width = w;
}
public void setHeight(int h)
{
height = h;
}
protected int width;
protected int height;
}
// 基类 PaintCost
public interface PaintCost
{
int getCost(int area);
}
// 派生类
class Rectangle : Shape, PaintCost
{
public int getArea()
{
return (width * height);
}
public int getCost(int area)
{
return area * 70;
}
}
class RectangleTester
{
static void Main(string[] args)
{
Rectangle Rect = new Rectangle();
int area;
Rect.setWidth(5);
Rect.setHeight(7);
area = Rect.getArea();
// طباعة مساحة العنصر
Console.WriteLine("المساحة الإجمالية: {0}", Rect.getArea());
Console.WriteLine("تكلفة الطلاء الإجمالية: ${0}", Rect.getCost(area));
Console.ReadKey();
}
}
}
عندما يتم تجميع وتنفيذ الكود أعلاه، سيتم توليد النتيجة التالية:
المساحة الإجمالية: 35 تكلفة الطلاء الإجمالية: $2450