مشخصات مقاله
-
1861
-
0.0
-
9559
-
0
-
0
آموزش ارث بری کلاس در سی شارپ
کلیه حقوق مادی و معنوی این مقاله متعلق به آموزشگاه تحلیل داده می باشد و هر گونه استفاده غیر قانونی از آن پیگرد قانونی دارد.
ارث بری کلاس (Class Inheritance)
این درس به شما ارث بری در C# را یاد می دهد. اهداف زیر را از این فصل دنبال می کنیم.
پیاده سازی کلاسهای پایه
پیاده سازی کلاسهای مشتق شده
مقدار دهی کلاسهای پایه از کلاسهای مشتق شده
یادگیری نحوه فراخوان اعضای اصلی کلاس
یادگیری نحوه مخفی سازی اعضای اصلی کلاس
ارث بری یکی از مفاهیم اصلی در برنامه نویسی شی گرا می باشد. این ویژگی به شما اجازه استفاده دوباره از کد های موجود را می دهد. با بکارگیری موثر از خاصیت استفاده دوباره می توانید در زمان برنامه نویسی صرفه جویی کنید.
لیست 1-8 ارث بری
Listing 8-1. Inheritance: BaseClass.cs
using System;
public class ParentClass
{
public ParentClass()
{
Console.WriteLine("Parent Constructor.");
}
public void print()
{
Console.WriteLine("I'm a Parent Class.");
}
}
public class ChildClass : ParentClass
{
public ChildClass()
{
Console.WriteLine("Child Constructor.");
}
public static void Main()
{
ChildClass child = new ChildClass();
child.print();
}
}
Output:
Parent Constructor.
Child Constructor.
I'm a Parent Class.
لیست 1-8 دو کلاس را نشان می دهد، کلاس بالا یی با نام ParentClass خوانده شده و کلاس اصلی ChildClass نامگذاری شده، آنچه می خواهیم انجام دهیم، ایجاد کلاس فرزند با استفاده از کد موجود از ParentClass می باشد.
در ابتدا می بایستی منظورمان را برای استفاده از کلاس والد (ParentClass) به عنوان کلاس پایه کلاس فرزند (ChildClass) بیان نماییم. برای اینکار کلاس فرزند را بصورت public class ChildClass : ParentClass اعلان می نماییم.
کلاس پایه را با قرار دادن علامت کالن : بعد از نام کلاس مشتق شده و قبل از نام کلاس پایه معلوم می نماییم. یعنی ابتدا نام کلاس فرزند که کلاس مشتق شده یا بدست آمده از کلاس والد است را ذکر نموده بعد علامت کالن : و در آخر نام کلاس مادر یا پایه قرار می گیرد.
توجه
C# فقط ارث بری از یک کلاس را پشتیبانی می کند، بنابراین فقط یک کلاس پایه برای ارث بردن از آن می توانید تعریف نمایید، ولی بهر حال به شما اجازه می دهد تا چندین ارث بری رابط یا اینترفیس را تعریف کنید،موضوعی که در ادامه درس بدان خواهیم پرداخت. کلاس فرزند دقیقا تمام قابلیت های کلاس والد را به همراه دارد، به همین خاطر می توانید بگویید کلاس فرزند یک کلاس والد است، این موضوع در متد Main() از کلاس فرزند هنگامی که متد Print() فراخوانده می شود نشان داده شده.
کلاس فرزند متد Print() مخصوص خودش را ندارد، از اینرو از متد Print() کلاس والد استفاده می کند. می توانید نتیجه را در خروجی خط سوم مشاهده کنید. کلاس های پایه بطور خودکار قبل از کلاس های مشتق شده نمونه سازی و مقداردهی می شوند. به خروجی لیست 1-8 توجه کنید. سازنده کلاس والد قبل از سازنده کلاس فرزند اجرا گردید.
لیست 2-8
Listing 8-2. Derived Class Communicating with Base Class: BaseTalk.cs
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 new void print()
{
base.print();
Console.WriteLine("I'm a Child Class.");
}
public static void Main()
{
Child child = new Child();
child.print();
((Parent)child).print();
}
}
Output:
From Derived
Child Constructor.
I'm a Parent Class.
I'm a Child Class.
I'm a Parent Class.
کلاس های مشتق شده می توانند در طول مدت نمونه سازی کلاس های پایه با آنها ارتباط برقرار سازند. لیست 2-8 نشان می دهد که چطور اینکار در اعلان سازنده فرزند انجام شده است. کالن : و کلمه کلیدی base سازنده کلاس پایه را با مقایسه لیست پارامتر صدا می زند.
اگر کد، base ("مشتق شده از") را به سازنده مشتق شده متصل نکند، بطور خودکار Parent() را فرا می خواند. خط اول خروجی سازنده کلاس پایه را که توسط رشته “From Derived” فراخوانده شده نشان می دهد. گاهی اوقات ممکن است خواسته باشید پیاده سازی خود تان از یک متد را که در یک کلاس پایه وجود دارد ایجاد کنید، کلاس Child اینکار را با اعلان متد Print()خودش انجام می دهد. متد Print() فرزند، متد Print() والد را مخفی می سازد. اثرش این است که متد جاپ والد فراخوانده نمی شود مگر اینکه ما کار خاصی انجام دهیم تا مطمئن شویم آن متد فراخوانده شده، درون متد Print() فرزند، ما صراحتا متد چاپ والد را صدا می زنیم. برای این کار، قبل از نام متد از پیشوند “base” استفاده می کنیم.
با استفاده از کلمه کلیدی base، می توانید به هر یک از اعضای کلاس محافظت شده (Protected) یا عمومی(Public) دست پیدا کنید. خروجی از متد چاپ Child مربوط به خطهای 3 و 4 می باشند، راه دیگر برای دستیابی به اعضای کلاس پایه از طریق شکل دهی (cast) صریح است. این کار در خط آخر متدMain() از کلاس Child انجام می پذیرد.
به یاد داشته باشید که یک کلاس مشتق یک ویژگی کلاس پایه اش است.این حقیقت به ما اجازه انجام یک شکل دهی(cast) روی کلاس مشتق شده را می دهد، تا آنرا یک نمونه از کلاس پایه اش بسازیم.
خط آخر خروجی لیست 2-8 متد چاپ را نشان می دهد که قطعا اجرا شده است. به اصلاح گر new دوی متد چاپ کلاس فرزند توجه کنید. این کار متد را قادر می سازد تا متد چاپ کلاس والد را و به طور صریح حالات منظورتان را که نمی خواستید پلی مورفیسم شود مخفی سازد.
بدون اضلاح گر new کامپایلر یک هشدار تولید می کند تا توجه تان را به این مطلب ترسیم نماید. بخش بعد را ورق بزنید تا بحث چند شکلی را با جزییات بیاموزید.
بطور خلاصه، فهمیدید چطور یک رابطه میان کلاس پایه / مشتق شده به وجود آورید. می توانید نمونه سازی کلاس پایه تان را کنترل کرده و متدهایش را یا صریحا و یا ضمنی فرا بخوانید و نیز آموختید که یک کلاس مشتق شده یک ویژگی بارز از کلاس پایه اش است.
من شما را به مطالعه درس 9 : پلی مورفیسم یا چند شکلی دعوت می کنم.