شی گرائی (بخش پنجم)
ارث بری بخش سوم
در پست قبلی با مفهموم ارث بری و نحوۀ کاربردش در کدنویسی آشنا شدید ، خب حالا در این پست کمی بیشتر دربارۀ ارث بری توضیح میدم
زمان ساختن یه شی از كلاس مشتق شده ، اول یک نمونه از كلاس والد خود بخود ساخته میشه این مورد در خروجی كد در پست قبلی زمانی كه متدهای سازنده ها روی صفحه چاپ میشن قابل درک ست به کد در پست قبلی دقت کنید.
خب حالا میخواییم ببینیم چطور میشه اطلاعات رو بین كلاس والد و كلاس فرزند رد و بدل کرد
کد:
using System;
public class Parent
{
string parentString;
public Parent()
{
Console.WriteLine("Parent Constructor.");
}
public Parent(string myString)
{
parentString = myString;
Console.WriteLine(parentString);
}
public void print()
{
Console.WriteLine("I'm a Parent Class.");
}
}
public class Child : Parent
{
public Child()
: base("From Derived")
{
Console.WriteLine("Child Constructor.");
}
public void print()
{
base.print();
Console.WriteLine("I'm a Child Class.");
}
public static void Main()
{
Child child = new Child();
child.print();
((Parent)child).print();
}
}
كلاس فرزند با كلاس والد می تونن تبادل اطلاعات كنن همانطور كه در مثال بالا میبینید با استفاده از كلمۀ كلیدی base ، كلاس فرزند تابع سازندۀ كلاس والد رو فراخوانی كرده. اولین خط خروجی نمایش دهندۀ این موضوع است.
زمانی می خوایم تابعی رو كه در كلاس والد تعریف شده رو در كلاس فرزند با تعریف دیگری و مخصوص به خودمان ایجاد کنیم در این صورت تابع تعریف شده در كلاس فرزند ، تابع هم نام والد را مخفی میکنه و دیگه آن تابع والد فراخوانی نخواهد شد.
در این حالت تنها یه راه برای دسترسی به تابع اصلی والد وجود داره و استفاده از کلمۀ base است كه در كد بالا پیاده سازی شده. با استفاده از base می تونیم به تمام اعضای public یا protected كلاس والد از درون كلاس فرزند دسترسی داشت.
کد:
((Parent)child).print();
راه دیگری هم وجود داره که در متد main گفته شده مثل بالا
در كد بالا در واقع child به نوعی از parent تبدیل شده، بنابراین مثل اینه كه یه نمونه از كلاس والد متد print همان كلاس را فراخوانی کنیم.