View Full Version : Anonymous Methods چیه ؟
Blackk_lightt
شنبه 30 شهریور 1387, 15:37 عصر
سلام
کسی در باره Anonymous Methods چیزی میدونه ؟
چند تا مطلب تو سایت پیدا کردم ولی چیزی نفهمیدم
اگه ممکنه یکی توضیح بده
علیرضا مداح
شنبه 30 شهریور 1387, 16: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, 17:19 عصر
سلام
ممنون
ولی این روشها جز تو Syntax فرقشون چیه ؟
علیرضا مداح
شنبه 30 شهریور 1387, 19: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, 02:18 صبح
علیرضا جان ممنون
بعد از مدت ها تازه یه مثال خوب از Lambda Expression دیدم
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.