PDA

View Full Version : آموزش: متدهای Extension در سی شارپ



mohammad.sakhidel
شنبه 28 فروردین 1389, 18:39 عصر
سلام دوستان.
راستش من امروز در حالی که داشتم کتابی رو میخوندم ، مطلبی رو دیدم که برام جالب بود ، میخوام اینجا مطرحش کنم شاید برای دوستان جالب باشه ، قبلش تو سایت یه جستجو زدم تا ببینم تکراری نباشه که نبود.


Extension Methods

این نوع متدها در C#‎‎ 3.0 ارائه شده اند و این توانایی رو به ما میدن که بتونیم انواع (Type) متغیر هارو توسعه بدیم بدون اینکه تغییراتی به اون نوع اعمال کنیم یا کلاس جدیدی برای هر Type ایجاد کنیم و از ارث بری استفاده کنیم.
این نوع متد ها بصورت static تعریف میشن.



مثال

یک کلاس جدید بنام MyExtensions در داخل فضای نام MyExtensionMethods ایجاد کنین. به شکل زیر :


namespace MyExtensionMethods
{
public static class MyExtensions
{
public static int GetWordCount(this System.String mystring)
{
return mystring.Split(null).Length;
}

public static bool IsValidemailAddress(this System.String myString)
{
bool res = false;
Regex rgx = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
res = rgx.IsMatch(myString);
return res;
}
}
}

حالا این دوتا متد به کلاس System.String اضافه شدن. برای مثال بصورت زیر می تونید از این متد ها استفاده کنید :


private void button1_Click(object sender, EventArgs e)
{
string myEmail = "mohammad.sakhidel@gmail.com";
string sentence = "Visit my website www.ramanweb.com";
bool isValidEmail = myEmail.IsValidemailAddress();
int wordsCount = sentence.GetWordCount();
}




امیدوارم مفید بوده باشه.

r00tkit
شنبه 28 فروردین 1389, 19:05 عصر
فکر کنم کامل نگشتی تو سایت در مورد C#‎ 3 صحبت شده که هیچ اکثر ویژگی های C#‎ 4 نیز معرفی و روشون بحث شده

مثلا:
http://www.barnamenevis.org/forum/showthread.php?p=360554

http://barnamenevis.org/forum/showpost.php?p=470951&postcount=77

و کلی لین دیگه

mohammad.sakhidel
شنبه 28 فروردین 1389, 19:36 عصر
شرمنده ندیده بودم.
خب حالا طوری نشده که ، شاید کسه دیگه ای هم مثل من اونارو پیدانکنه و بیاد اینو بخونه.
موفق باشی.

AliRezaPro
شنبه 28 فروردین 1389, 19:52 عصر
قبل از شما مدیر محترم بخش sajjadlove آموزش هایی در همین راستارو داده بودند در این تاپیک

http://barnamenevis.org/forum/showpost.php?p=830946&postcount=2
ولی از اینکه این مطلبی رو در کتابی خواندید و فکر کردید که شاید برای بهبود این بخش مفید واقع بشه این پست رو زدیید (البته با جستجو که انجام دادید و به نتیجه نرسیده بودید) جای تحسین داره.
موفق باشید/.