وراثت (Inheritance) در زبان سی شارپ
یکی از مفاهیم مهم و پر کاربر در برنامه نویسی شیء گرا، مفهوم وراثت (Inheritance) است. وراثت به ما اجازه می دهد تا یک کلاس با استفاده از ویژگی های کلاس دیگر بسازیم. این موضوع باعث راحتر شدن کار ایجاد و نگه داری برنامه می شود. همچنین با کمک وراثت امکان استفاده مجدد از کدها فراهم می شود و سرعت و کارایی برنامه نیر افزایش می یابد.
در زمان ایجاد یک کلاس جدید، به جای آن که تمامی اعضای آن را از نو بنویسید، می توانید از اعضای مشابهی که در کلاس دیگر وجود دارد است استفاده کنید. کلاسی از اعضای آن استفاده می شود کلاس base یا parent و کلاسی که استفاده کننده است کلاس derived یا child نامیده می شود.
در حقیقت نظریه وراثت رابطه IS-A (است – یک) را پیاده سازی می کند. برای نمونه پستاندار یک حیوان است، سگ یک پستاندار است از این رو سگ یک حیوان است. نمونه انگلیسی این مثال:
mammal IS A animal, dog IS-A mammal hence dog IS-A animal as well.
کلاس های والد و فرزند (Base and Derived)
یک کلاس می تواند از یک یا چند کلاس و اینترفیس ارث بری کند. به عبارت دیگر می تواند داده ها و توابع را از کلاس ها و اینترفیس های مختلفی به ارث ببرد.
شکل کلی تعریف یک کلاس base و یک کلاس derived به صورت زیر است:
<acess-specifier> class <base_class> { ... } class <derived_class> : <base_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; } // Derived class class Rectangle: Shape { public int getArea() { return (width * height); } } class RectangleTester { static void Main(string[] args) { Rectangle Rect = new Rectangle(); Rect.setWidth(5); Rect.setHeight(7); // Print the area of the object. Console.WriteLine("Total area: {0}", Rect.getArea()); Console.ReadKey(); } } }
امتحان کنید
زمانی که کد بالا توسط کامپایلر سی شارپ اجرا شود، نتیجه زیر را تولید خواهد کرد:
Total area: 35
مقدار دهی کلاس Base
کلاس فرزند اعضای کلاس والد را به ارث می برد، بنابراین باید قبل از کلاس فرزند ایجاد شود. مثال زیر نحوه مقدار دهی کلاس والد از طریق کلاس فرزند را نشان می دهد:
using System; namespace RectangleApplication { class Rectangle { //member variables protected double length; protected double width; public Rectangle(double l, double w) { length = l; width = w; } public double GetArea() { return length * width; } public void Display() { Console.WriteLine("Length: {0}", length); Console.WriteLine("Width: {0}", width); Console.WriteLine("Area: {0}", GetArea()); } }//end class Rectangle class Tabletop : Rectangle { private double cost; 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("Cost: {0}", GetCost()); } } class ExecuteRectangle { static void Main(string[] args) { Tabletop t = new Tabletop(4.5, 7.5); t.Display(); Console.ReadLine(); } } }
امتحان کنید
زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:
Length: 4.5 Width: 7.5 Area: 33.75 Cost: 2362.5
وراثت چندگانه در زبان C#
زبان برنامه نویسی 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; } // Base class PaintCost public interface PaintCost { int getCost(int area); } // Derived class 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(); // Print the area of the object. Console.WriteLine("Total area: {0}", Rect.getArea()); Console.WriteLine("Total paint cost: ${0}" , Rect.getCost(area)); Console.ReadKey(); } } }
امتحان کنید
زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:
Total area: 35 Total paint cost: $2450
نوشته وراثت (Inheritance) در زبان سی شارپ – آموزش زبان سی شارپ اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.