متد های بینام در سی شارپ
متدهای بینام در سیشارپ روشی برای تعریف متد بدون نام مستقل هستند که با دلیگیتها برای اجرای دستورات استفاده میشوند.
22 آبان 1405
لینک کوتاه
متدهای بینام در سیشارپ چیست و چگونه از آنها استفاده کنیم؟
متدهای بینام در سیشارپ (Anonymous Methods) یکی از قابلیتهای زبان برنامهنویسی #C هستند که به برنامهنویس اجازه میدهند بدون تعریف یک متد مستقل و نامگذاریشده، مجموعهای از دستورات را در همان محل موردنیاز بنویسد و اجرا کند.این قابلیت بهخصوص هنگام استفاده از دلیگیتها (Delegates)، مدیریت رویدادها و ارسال یک قطعه کد بهعنوان پارامتر کاربرد دارد.
در بسیاری از برنامهها، ممکن است به عملیاتی نیاز داشته باشیم که فقط در یک محل استفاده شود.
در چنین شرایطی، تعریف یک متد جداگانه میتواند باعث افزایش تعداد متدهای برنامه شود.
متدهای بینام این امکان را فراهم میکنند که منطق موردنظر را مستقیماً در محل استفاده بنویسیم و ساختار کد را سادهتر کنیم.
آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
متد بینام در سیشارپ چیست؟
متد بینام، متدی است که بدون داشتن نام مشخص تعریف میشود و معمولاً از طریق یک دلیگیت قابل فراخوانی است.برای تعریف این نوع متد از کلمه کلیدی delegate استفاده میشود.
در متدهای معمولی، ابتدا یک نام برای متد انتخاب میکنیم، پارامترهای آن را مشخص میکنیم و سپس دستورات موردنظر را داخل بدنه متد قرار میدهیم.
اما در متد بینام، بدنه دستورات مستقیماً در محل تعریف دلیگیت نوشته میشود.
برای مثال، کد زیر یک متد بینام ساده را نشان میدهد:
using System;
class Program
{
static void Main()
{
Action message = delegate
{
Console.WriteLine("Hello C#");
};
message();
}
}
خروجی برنامه به شکل زیر است:Hello C#
در این مثال، Action یک دلیگیت آماده در سیشارپ است که برای اجرای متدی بدون پارامتر و بدون مقدار بازگشتی استفاده میشود.
عبارت delegate بدنه متد بینام را مشخص میکند و دستور Console.WriteLine هنگام فراخوانی دلیگیت اجرا میشود.
نکته مهم این است که تعریف متد بینام بهتنهایی باعث اجرای دستورات آن نمیشود.
برای اجرای کد، باید دلیگیت مربوط به آن را فراخوانی کنیم.
نحوه تعریف متدهای بینام
ساختار کلی تعریف یک متد بینام به شکل زیر است:delegate (parameters)
{
// Statements
};
در این ساختار، کلمه کلیدی delegate شروع تعریف متد بینام را مشخص میکند.
پارامترها در صورت نیاز داخل پرانتز قرار میگیرند و دستورات اجرایی داخل آکولاد نوشته میشوند.
متد بینام معمولاً به یک دلیگیت اختصاص داده میشود. نوع دلیگیت باید با پارامترها و نوع خروجی متد سازگار باشد.
برای نمونه، اگر بخواهیم دو عدد را دریافت کنیم و حاصل جمع آنها را برگردانیم، میتوانیم از Func استفاده کنیم:
using System;
class Program
{
static void Main()
{
Func<int, int, int> sum = delegate(int a, int b)
{
return a + b;
};
Console.WriteLine(sum(10, 20));
}
}
خروجی:
30
در این مثال، Func<int, int, int> یک دلیگیت آماده است که دو ورودی از نوع int دریافت میکند و نتیجهای از نوع int برمیگرداند.
دو پارامتر a و b در متد بینام تعریف شدهاند و دستور return حاصل جمع آنها را بازمیگرداند.
با فراخوانی sum(10, 20)، مقادیر ورودی به متد بینام ارسال میشوند و نتیجه محاسبهشده در خروجی نمایش داده میشود.
کاربرد Action و Func در متدهای بینام
برای استفاده از متدهای بینام، لازم نیست همیشه دلیگیت اختصاصی تعریف کنیم.سیشارپ چند دلیگیت عمومی و آماده دارد که از مهمترین آنها میتوان به Action و Func اشاره کرد.
-
استفاده از Action
دلیگیت Action برای متدهایی مناسب است که ممکن است پارامتر داشته باشند، اما مقداری برنمیگردانند.
مثال:
Action<string> showMessage = delegate(string text)
{
Console.WriteLine(text);
};
showMessage("Learning Anonymous Methods");
در این برنامه، دلیگیت Action<string> یک مقدار متنی دریافت میکند. متد بینام نیز همان متن را در کنسول نمایش میدهد.
-
استفاده از Func
دلیگیت Func زمانی کاربرد دارد که بخواهیم یک یا چند مقدار ورودی دریافت کنیم و در نهایت نتیجهای برگردانیم.
نوع آخر در تعریف Func، نوع مقدار بازگشتی را مشخص میکند.
نوع آخر در تعریف Func، نوع مقدار بازگشتی را مشخص میکند.
مثال:
Func<int, int> square = delegate(int number)
{
return number * number;
};
Console.WriteLine(square(5));
خروجی:
25
در این مثال، دلیگیت یک عدد صحیح دریافت میکند و مربع آن را برمیگرداند. عدد ۵ به متد ارسال میشود و نتیجه محاسبه، یعنی ۲۵، نمایش داده میشود.
استفاده از متدهای بینام برای مدیریت رویدادها
یکی از کاربردهای متدهای بینام، مدیریت رویدادها است.در برنامههایی که با رابط کاربری کار میکنند، معمولاً لازم است پس از وقوع یک رویداد، مانند کلیک روی دکمه، مجموعهای از دستورات اجرا شود.
در چنین شرایطی، میتوانیم بهجای تعریف یک متد جداگانه، منطق موردنظر را مستقیماً هنگام ثبت رویداد بنویسیم.
برای مثال، در برنامههای Windows Forms میتوان از ساختاری مشابه کد زیر استفاده کرد:
button1.Click += delegate(object sender, EventArgs e)
{
MessageBox.Show("دکمه کلیک شد");
};
در این مثال، هنگام کلیک روی button1، پیام موردنظر نمایش داده میشود.
پارامتر sender به شیئی اشاره میکند که رویداد را ایجاد کرده است و e اطلاعات مربوط به رویداد را در اختیار برنامه قرار میدهد.
این روش برای رویدادهایی مناسب است که منطق آنها کوتاه است و فقط در همان محل استفاده میشود.
اگر دستورات مربوط به رویداد طولانی باشند یا در چند بخش برنامه تکرار شوند، تعریف یک متد مستقل معمولاً انتخاب مناسبتری خواهد بود.
تفاوت متدهای بینام با متدهای معمولی
تفاوت اصلی متدهای بینام با متدهای معمولی در نحوه تعریف و استفاده از آنها است.در متدهای معمولی، باید یک نام مشخص برای متد انتخاب کنیم. سپس در محل موردنیاز، با استفاده از نام متد آن را فراخوانی میکنیم یا نام آن را به یک دلیگیت اختصاص میدهیم.
اما در متدهای بینام، نیازی به تعریف نام جداگانه وجود ندارد و میتوانیم دستورات را مستقیماً در محل استفاده بنویسیم.
برای مثال، یک متد معمولی به شکل زیر تعریف میشود:
static void ShowMessage()
{
Console.WriteLine("Hello");
}
برای استفاده از آن میتوانیم بنویسیم:
ShowMessage();
در مقابل، همین عملیات با متد بینام به شکل زیر قابل انجام است:
Action show = delegate
{
Console.WriteLine("Hello");
};
show();
هر دو روش پیام یکسانی را نمایش میدهند، اما ساختار آنها متفاوت است.
متد معمولی زمانی مفیدتر است که بخواهیم یک عملیات را در قسمتهای مختلف برنامه فراخوانی کنیم.
متد بینام بیشتر برای اجرای منطقهای کوتاه و محلی کاربرد دارد.
دسترسی به متغیرهای خارج از متد بینام
متدهای بینام میتوانند به متغیرهای محلی تعریفشده در محدوده بیرونی خود دسترسی داشته باشند.به این رفتار، گرفتن یا ثبت متغیر (Capture) گفته میشود.
برای مثال:
int number = 10;
Action increase = delegate
{
number++;
};
increase();
Console.WriteLine(number);
خروجی:
11
در این مثال، متغیر number خارج از متد بینام تعریف شده است، اما متد بینام میتواند مقدار آن را تغییر دهد. به همین دلیل، پس از فراخوانی دلیگیت، مقدار متغیر از ۱۰ به ۱۱ تغییر میکند.
این ویژگی انعطافپذیری زیادی ایجاد میکند، اما باید با دقت از آن استفاده کرد.
اگر متغیری در چند بخش برنامه تغییر کند، تشخیص مقدار نهایی آن ممکن است دشوار شود.
همچنین در برنامههای چندنخی، دسترسی همزمان به متغیرهای مشترک میتواند به مشکلات همزمانی منجر شود.
مزایای متدهای بینام در سیشارپ
متدهای بینام مزایای مختلفی دارند که مهمترین آنها سادهتر شدن ساختار کد و کاهش نیاز به تعریف متدهای جداگانه است.نخستین مزیت این روش، نزدیک بودن منطق اجرا به محل استفاده است.
هنگامی که یک عملیات کوتاه فقط در یک بخش برنامه موردنیاز باشد، نوشتن آن در همان محل میتواند خوانایی کد را افزایش دهد.
مزیت دیگر، سهولت استفاده از دلیگیتها و رویدادها است.
برنامهنویس میتواند رفتار موردنظر را هنگام ثبت دلیگیت مشخص کند و از تعریف متدهای اضافی جلوگیری کند.
همچنین، متدهای بینام امکان استفاده از متغیرهای محدوده بیرونی را فراهم میکنند.
این ویژگی در مواردی که منطق موردنظر به اطلاعات محلی همان بخش وابسته است، بسیار مفید خواهد بود.
بااینحال، استفاده بیشازحد از این روش نیز توصیه نمیشود.
اگر بدنه متد بینام طولانی شود، کد ممکن است پیچیده و دشوار برای نگهداری باشد.
در چنین شرایطی بهتر است منطق برنامه را در یک متد مستقل قرار دهیم.
جمعبندی
متدهای بینام در سیشارپ قابلیتی هستند که امکان تعریف یک قطعه کد بدون نامگذاری مستقل را فراهم میکنند.این متدها با استفاده از کلمه کلیدی delegate نوشته میشوند و معمولاً از طریق دلیگیتهایی مانند Action و Func قابل فراخوانی هستند.
از مهمترین کاربردهای آنها میتوان به مدیریت رویدادها، اجرای عملیات کوتاه و ارسال منطق اجرایی به بخشهای دیگر برنامه اشاره کرد.
همچنین امکان دسترسی به متغیرهای محدوده بیرونی، این قابلیت را برای بسیاری از سناریوهای برنامهنویسی کاربردی میکند.




کاربران ما
شما هم نظرتون با ما دریاره “متد های بینام در سی شارپ” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید