آشنایی با کلاسها و اشیا (3)

وراثت :: Inheritance
یکی از مهمترین مباحثی که در برنامه نویسی زبانهای شی گرا (مانند سي شارپ و وي بی دات نت) وجود دارد، وراثت یا Inheritance است. وقتی که ما یک پروژه ویندوزی مانند برنامه Hello World رو شروع می کنیم، محیط برنامه نویسی ویژوال استدیو (Visual Studio .NET Integrated Development Environment) یک تعریف به شکل زیر رو ایجاد می کند:
public class Form1 : System.Windows.Forms.Form این تعریف به معنای این است که فرم ایجاد شده فرزند کلاسی به نام Form است. که دارای مفاهیم بسیار قوی است. ما می توانیم اشیایی رو بسازیم و خصوصیات آنها رو تغییر بدهیم. در این صورت رفتار هر شی بصورت خاص همان شی ولی در کل مشابه کلاس اصلی خواهد بود. در زیر مثالهایی برای این موضوع رو می بینید:

سازنده ها: (Constructors)
همه کلاسها دارای یک سازنده یا Constructor هستند که در زمان ایجاد یک نمونه از کلاس فراخوانی می شوند. سازنده همیشه همنام با نام کلاس است. اگر به کد تولید شده در برنامه Hello world نگاهی بیندازید، کدی مشابه کد زیر را خواهید دید:
/// Sample Code 1
public class Form1
{
  public Form1() //constructor
  {
    InitializeComponent();
  }
}
زمانی که یک کلاس را تعریف می کنید، باید یک سازنده برای مقداردهی اولیه آن ایجاد نمایید. البته می توانید پارامترهایی رو به اون ارجاع بدید تا مقداردهی آرگومانهای کلاس مطابق آنچه شما مد نظر دارید مقداردهی شوند. اگر شما برای کلاسی که می نویسید سازنده قرار ندهید، یک سازنده بدون آرگومان در حالت مخفی ساخته می شود.
متد InitializeComponent توسط IDE ساخته شده که حاوی دستورات ساخت و جانمایی کنترلها روی صفحه است. اگر احتیاج به مقداردهی و یا اجرای دستورات خاص دیگری باشد، من یک متد دیگر معمولا به نام Init ایجاد می کنم و دستورات مورد نظر را در آن قرار می دهم. این متد پس از فراخوانی InitializeComponent فراخوانی می شود:

/// Sample Code 2
public Form1() //constructor
{
  InitializeComponent();
  Init();
}
private void Init()
{
  pi=3.141259f; //set initial value of pi
}

رسم و گرافیک در سی شارپ
[این مطلب در خصوص وراثت آمده و در بخش های بعدی مطلب گرافیک بصورت مجزا مورد بحث قرار خواهد گرفت]
در اولین مثال ما یک برنامه گرافیکی داریم که دارای یک PictureBox است و می خواهیم که یک خط در آن رسم کنیم، در سی شارپ، رسم محتویات پنجره به عهده سیستم ویندوز خواهد بود در زمان این اتفاق رویداد Paint مورد استفاده قرار می گیرد. پس می توانیم کد مورد نظر خود را در این رویداد بنویسیم تا در زمان فراخونی رویداد Paint شکل مورد نظر ما نیز رسم شود. (رویداد paint در زمانهایی مثل تغییر سایز، رسم مجدد، مخفی شدن قسمتی از پنجره اتقاق می افتد) برای این منظور یک کنترل PictureBox روی فرم قرار داده شده.
یک رویداد Paint به کنترل تصویر اضافه کرده، کدی مانند کد زیر ایجاد می شود:
private void pic_Paint(object sender, PaintEventArgs e)
{
}
همچنین کد زیر در متد InitializeComponents قرار می گیرد:
this.pic.Paint += new PaintEventHandler(this.pic_Paint); شی PaintEventArgs توسط روتینهای سیستمی سطح پایین پاس داده می شود. برای رسم یک شی ابتدا باید یک شی Pen ایجاد نمایید، رنگ آن را مشخص نموده و در صورتی که مایل بودید می توانید پهنای آن را مشخص نمایید. در مثال زیر شی Pen با رنگ مشکی و پهنای پیش فرض 1 استفاده شده است:
/// Sample Code 3
private void pic_Paint(object sender, PaintEventArgs e)
{ Graphics g = e.Graphics; //get Graphics surface
Pen rpen = new Pen(Color.Black); //create a Pen
g.drawLine(rpen, 10,20,70,80); //draw the line
}
در این مثال، نشان داده شده که یک قلم در هر بار فراخوانی رویداد Paint ساخته شده. ما می توانیم یک قلم را در سازنده کلاس پنجره Window's Constructor یا در متد Init قرار دهیم و هر بار فقط از آن استفاده نماییم.

استفاده از وراثت
وراثت در سی شارپ این قابلیت را به ما می دهد که یک کلاس از کلاس آماده دیگر مشتق بگیریم. در کلاس جدید مشتق شده ما فقط می توانیم متدهای جدید را اضافه نماییم یا متدهای قبلی را تغییر دهیم. بقیه موارد دیگر بصورت خودکار از کلاس پایه به کلاس جدید به ارث خواهد رسید. برای دیدن این موضوع من یک کلاس Rectangle ساده می نویسم که یک مستطیل در پنجره رسم خواهد کرد. این کلاس دارای دو متد و یک سازنده است:
/// Sample Code 4
namespace CsharpMagic
{ public class Rectangle
{ private int x, y, w, h;
protected Pen rpen;
public Rectangle(int x_, int y_, int w_, int h_)
{ x = x_; //save coordinates
y = y_;
w = w_;
h = h_;
//create a pen
rpen = new Pen(Color.Black);
}
//--------------------------
public void draw(Graphics g)
{ //draw the rectangle
g.DrawRectangle (rpen, x, y, w, h);
}
}
} تگهای فارسی: مهدی ریزوندی، سی شارپ، سي شارپ، برنامه نویسی، وراثت، شی گرا، کلاس، شی، سازنده، کد نمونه، مقداردهی اولیه، رسم و گزافیک، رویداد، شی قلم 
English Tags: Mehdi Rizvandi, Csharp, C sharp, C#, Programming, Inheritance, Object Oriented (OO), Class, Object, Instance, Sample Code, Initialize, Darwing and Graphics, Event, Pen Object, PaintEventArgs, Underlying System


مطالب مشابه :


آموزش برنامه نویسی گرافیک در سی شارپ_قسمت نهم

دستورات گرافیک سی شارپ #c آموزش برنامه نویسی گرافیک سی شارپ ساخت کامپوننت در سی شارپ




عضویت در بخش:آموزش برنامه نویسی سی شارپ c# windows Application

دستورات گرافیک سی شارپ #c آموزش برنامه نویسی گرافیک سی شارپ ساخت کامپوننت در سی شارپ




آموزش برنامه نویسی گرافیک در سی شارپ_قسمت یازدهم

C# windows Application آموزش برنامه نویسی سی شارپ: ايجاد يك پروژه تحت ويندوز در دات نت. بررسي فرم ها در




گرافیک در سی شارپ

گرافیک در سی شارپ. پروژه درس گرافیک برچسب‌ها: graphic, C, گرافیک, سی شارپ, Source Code




مقدمه اي بر سي شارپ : قسمت سوم

دستورات گرافیک سی شارپ #c آموزش برنامه نویسی گرافیک سی شارپ ساخت کامپوننت در سی شارپ




مقدمه اي بر سي شارپ : قسمت بيستم

آموزش گرافیک در سی شارپ. مقدمه اي بر سي شارپ : قسمت بيستم . مقدمه اي بر سي شارپ : قسمت بيستم .




گرافیک در سی شارپ(استاد دوره : مهندس وحید اشرف)

الگوریتم رسم خط در سی شارپ: ابتدا یک عکس یا جعبه عکس در فرم قرار می دهیم: public partial class Form1: Form




آموزش برنامه نویسی سی شارپ C# windows Application - قسمت ششم

دستورات گرافیک سی شارپ #c آموزش برنامه نویسی گرافیک سی شارپ ساخت کامپوننت در سی شارپ




مقدمه اي بر سي شارپ : قسمت هفتم

دستورات گرافیک سی شارپ #c آموزش برنامه نویسی گرافیک سی شارپ ساخت کامپوننت در سی شارپ




آشنایی با کلاسها و اشیا (3)

رسم و گرافیک در سی شارپ [این مطلب در خصوص وراثت آمده و در بخش های بعدی مطلب گرافیک بصورت مجزا




برچسب :