PDA

View Full Version : Anonymous Methods چیه ؟



Blackk_lightt
شنبه 30 شهریور 1387, 14:37 عصر
سلام
کسی در باره Anonymous Methods چیزی میدونه ؟
چند تا مطلب تو سایت پیدا کردم ولی چیزی نفهمیدم
اگه ممکنه یکی توضیح بده

علیرضا مداح
شنبه 30 شهریور 1387, 15:20 عصر
سلام دوست عزیز،
پیش از ظهور C# 2.0 شما برای اعلان یک delegate میبایست از named-method ها استفاده میکردید ، به طور نمونه اگر قصد ست کردن رویداد Click مربوط به یک Button را به یک متد داشتید باید از کد زیر بهره میگرفتید :


private void Form1_Load(object sender, EventArgs e)
{
button1.Click += new EventHandler(button1_Click);
}
void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Clicked");
}


در C# 2.0 شما میتوانید delegate مورد نظر را در بدنه ی کد خود و بدون نیاز به تعریف متد مجزا اعلان کنید ، کد فوق را در C# 2.0 میتوانیم بدینصورت بازنویسی کنیم :


private void Form1_Load(object sender, EventArgs e)
{
button1.Click += delegate(object sender2, EventArgs e2)
{
MessageBox.Show("Clicked");
};
}


و معادل بازنویسی شده کد فوق در C# 3.0 با بهره گیری از ویژگی Lambda Expressions :


private void Form1_Load(object sender, EventArgs e)
{
button1.Click += (object sender2, EventArgs e2) =>
{
MessageBox.Show("Clicked");
};
}

Blackk_lightt
شنبه 30 شهریور 1387, 16:19 عصر
سلام
ممنون
ولی این روشها جز تو Syntax فرقشون چیه ؟

علیرضا مداح
شنبه 30 شهریور 1387, 18:48 عصر
1)کاهش حجم سورس کد
2)Share کردن آبجکت های متد با Anonymous Method یا Lambda Expression ی که در بدنه آن قرار دارد ، به طور مثال :


private void Form1_Load(object sender, EventArgs e)
{
int i = 1;
button1.Click += delegate(object sender2, EventArgs e2)
{
MessageBox.Show(i.ToString());
//Shows "2" when button is clicked.
};
i = 2;
}

3)... با مطالعه بیشتر در زمینه ی موارد ذکر شده به فواید آنها پی خواهید برد ،/
http://msdn.microsoft.com/en-us/magazine/cc163970.aspx
http://www.developer.com/net/csharp/article.php/3598381
http://www.codeproject.com/KB/cs/explore_lamda_exp.aspx
...

mdssoft
یک شنبه 31 شهریور 1387, 01:18 صبح
علیرضا جان ممنون
بعد از مدت ها تازه یه مثال خوب از Lambda Expression دیدم