PDA

View Full Version : مقدمه ای بر سی شارپ : قسمت- 8



Vahid_Nasiri
شنبه 18 مرداد 1382, 17:53 عصر
تعریف متدها در سی شارپ

در این قسمت به یکی از مهمترین مباحث برنامه نویسی سی شارپ می رسیم.
متدها در سی شارپ و یا همان توابع در زبان C ، اعضای یک شیء یا کلاس هستند و مجموعه ای از یک سری از کارها را انجام می دهند. فرض کنید در برنامه ی شما ، قسمتی باید یک عملیات ریاضی خاص را انجام دهد و این قسمت از کد که شامل چندین خط نیز می گردد باید بارها و بارها در برنامه صدا زده شود. برای نظم بخشیدن به برنامه ، آنها را می توان به صورت توابع بسته بندی کرد و بجای نوشتن چندین خط تکراری، فقط نام این بسته ( تابع ) و پارامترهای آن را فراخوانی نمود.

در سی شارپ یک تابع به صورت زیر تعریف می شود :


(نوع و اسامی پارامترها) نام تابع نوع خروجی تابع سطح دسترسی به تابع
}
بدنه ی تابع
{

برای تعریف یک متد یا تابع ابتدا سطح دسترسی به آن مانند public و private سپس نوع خروجی تابع مانند void ( هیچی ) ذکر می گردد که داخل این پرانتزها می توان ورودی های تابع یا بقولی آرگومان های ورودی را معرفی کرد. سپس تابع باید با { شروع و با یک } خاتمه یابد.

برای مثال :


public int myFunc( int x )
{
...….
}

هر تابعی می تواند صفر تا تعداد بیشماری آرگومان ورودی و صفر تا تعداد بیشماری خروجی داشته باشد. بوسیله یک تابع می توان پیچیدگی کار را مخفی کرد و صرفا با صدا زدن نام آن ، یک سری از عملیات را انجام داد. گاهی از اوقات لازم می شود دو یا چند تابع با یک نام داشته باشیم بطوریکه پارامترهای ورودی یا مقادیر خروجی و یا نوع آرگومان های ورودی آنها با هم متفاوت باشد به این کار overloading می گویند.
بسیاری از کلاس های دات نت فریم ورک متدها و یا توابع مفید حاضر و آماده ای را دارند. برای مثال کلاس DateTime ، متدی به نام ToLongDatastring دارد که تاریخ را به صورت یک رشته طولانی بر می گرداند.


توابع void :

توابعی که با نوع void معرفی می شوند هیچ خروجی ندارند و در زبان ویژوال بیسیک به آْنها sub و در دلفی به آنها procedure می گویند.


بازگرداندن یک مقدار از یک تابع :

پس از اینکه عملیات یک مجموعه از کدها درون تابع به پایان رسید با استفاده از کلمه ی return می توان خروجی تابع را معرفی کرد. لازم به ذکر است ، هرجایی این کلمه ی return ذکر شود کار تابع خاتمه می یابد.


بهتر است موارد فوق را با چند مثال مرور کنیم :

مثال : یک برنامه ی سی شارپ جدید console را در VS.NET باز کنید و نام آنرا درابتدا ex13 انتخاب نمایید. در اینجا می خواهیم تابعی را تعریف کنیم که سه برابر جذر یک عدد را بر می گرداند.


using System;

namespace ex13
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
Console.WriteLine( int3SQL(3) );
Console.ReadLine();
}

public static double int3SQL( double intInput )
{
double i=0;
i = Math.Sqrt( intInput );
return i;
}
}
}


توضیحاتی در مورد کد فوق :

1- از شیء Math در سی شارپ می توان برای انجام یک سری عملیات ریاضی ابتدایی استفاده کرد. در اینجا از متد جذر گرفتن آن استفاده شده است.
2- در تعریف تابع خودمان از کلمه ی کلیدی static استفاده شده است. درون تابع Main نمی توان توابع غیر استاتیک را فراخوانی کرد. فعلا این نکته را بخاطر را داشته باشید تا در مقالات بعدی بیشتر راجع به آن صحبت شود.
3- بد نیست تابع تعریف شده را کمی بیشتر آنالیز کنیم :


public static double int3SQL( double intInput )
{
double i=0;
i = Math.Sqrt( intInput );
return i;
}


ابتدا سطح دسترسی به تابع ذکر شده است. پابلیک ، یعنی این تابع خارج از کلاس یک برنامه نیز قابل دسترسی است. سپس از کلمه ی static استفاده گردیده که توضیح مختصری را در مورد آن ملاحظه کردید. در ادامه نوع خروجی تابع که در اینجا double می باشد معرفی گردیده است. دقت کنید که حتما باید نوع تعریف شده با مقداری که یک تابع بر می گرداند یکسان باشد و گرنه با یک خطا برنامه متوقف می شود. سپس نام تابع تعریف شده است. داخل پرانتز ها نوع و نام آرگومانی ارائه شده است که در بدنه ی تابع استفاده می گردد. اگر به تعداد بیشتری پارامتر و یا آرگومان نیاز بود می توان آنها را با , از هم جدا کرد.
پس از اینکه عملیات تابع خاتمه می یابد با استفاده از return این خروجی را معرفی می نماییم.
برای استفاده از این تابع به سادگی نام تابع و سپس پرانتزها به همراه یک عدد دلخواه را می نویسم که آنرا در متد Main برنامه می توان مشاهده کرد.



تعریف توابع در کلاس های دیگر برنامه و نحوه ی استفاده از آنها :

یکی از زیبایی های برنامه نویسی شیء گرا نظم و ترتیب و بسته بندی کارها می باشد که اصطلاحا در اینجا به آن encapsulation می گویند. یعنی ما یک سری از توابع و خواص را درون کپسولی به نام کلاس قرار می دهیم تا به سادگی بارها و بارها از آن استفاده نماییم.
برای اینکار به سادگی یک توابع را به صورت معمول درون کلاس تعریف می نماییم و سپس همانند خواص که در مورد آنها صحبت شد ، از توابع می توان استفاده کرد با این تفاوت که هنگام کار با توابع حتی اگر آنها هیچ آرگومان و یا پارامتر ورودی هم نداشته باشند ذکر پرانتزها الزامی است.


مثالی دیگر در این زمینه :

مثال : یک برنامه ی سی شارپ جدید console را در VS.NET باز کنید و نام آنرا درابتدا ex14 انتخاب نمایید. سپس از منوی پروژه یک کلاس جدید را به برنامه اضافه نمایید (نام آنرا clsTools بگذارید) .


using System;

namespace ex14
{
public class clsTools
{
public clsTools()
{
}

public uint intCalc ( uint a , uint b )
{
uint c = Math.Min (a,b);
double x = Math.Sqrt(c) ;
uint w = Convert.ToUInt32 ( x);
return w;
}
}
}

سپس در متد Main برنامه می توان به صورت زیر از آن استفاده کرد :


using System;

namespace ex14
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
clsTools m_var = new clsTools();
Console.WriteLine( m_var.intCalc(4,9));
Console.ReadLine();
}
}
}

توضیحاتی در مورد کد فوق :
1- تابع intCalc ما دو عدد صحیح مثبت را می گیرد و سپس جذر کوچکترین دو عدد ورودی را محاسبه می کند.
2- برای تبدیل نوع های عددی مختلف به هم می توان از شیء Convert استفاده کرد.
3- بدون استفاده از شیء Convert یکبار برنامه را اجرا کنید و دلیل خطای بوجود آمده را بیان نمایید.



بحث توابع ادامه دارد...