🔬 کالبدشکافی متدها در #C: امضا (Signature) و Overloading
هر متدی در #C یک "اثر انگشت" یا امضای (Signature) منحصر به فرد داره. این امضا هویت متد رو مشخص میکنه و به کامپایلر اجازه میده بین چندین متد با اسم یکسان، تفاوت قائل بشه.
امروز میخوایم این مفهوم حیاتی و قوانین Overloading رو کالبدشکافی کنیم.
1️⃣ امضای متد (Method Signature) چیست؟ 🆔
امضای یک متد از دو بخش اصلی تشکیل شده:
• اسم متد
• نوع و ترتیب پارامترها
نکات کلیدی و تلهها: ⚠️
موارد زیر جزو امضای متد حساب نمیشن:
❌ نوع خروجی (Return Type)
❌ کلمه کلیدی params
❌ اسم پارامترها (فقط نوع و ترتیبشون مهمه)
اما کلمات کلیدی ref و out جزو امضا حساب میشن!
2️⃣ اورلودینگ (Overloading): یک اسم، چند کاربرد 🎭
اورلودینگ یعنی شما میتونید چند متد با اسم یکسان در یک کلاس داشته باشید، به شرطی که امضاشون متفاوت باشه (یعنی تعداد، نوع یا ترتیب پارامترهاشون فرق کنه).
مثال Overloadهای معتبر: ✅
// اینها همگی Overloadهای معتبری از Foo هستن
void Foo(int x) { }
void Foo(double x) { } // نوع پارامتر فرق داره
void Foo(int x, float y) { } // تعداد پارامترها فرق داره
void Foo(float x, int y) { } // ترتیب انواع پارامتر فرق داره
void Foo(ref int x) { } // وجود ref امضا رو تغییر میده
مثال Overloadهای نامعتبر: ❌
// ❌ خطای زمان کامپایل!
// چون فقط نوع خروجی فرق میکنه که جزو امضا نیست.
void Foo(int x) { }
float Foo(int x) { }
// ❌ خطای زمان کامپایل!
// چون params جزو امضا نیست.
void Goo(int[] x) { }
void Goo(params int[] x) { }
// ❌ خطای زمان کامپایل!
// ref و out نمیتونن تنها تفاوت امضا باشن.
void Another(ref int x) { }
void Another(out int x) { }
🤔 حرف حساب و تجربه شما
درک دقیق قوانین امضا و اورلودینگ، به شما کمک میکنه APIهای تمیز، خوانا و قابل فهمی طراحی کنید.
آیا تا حالا با خطای کامپایل به خاطر امضای تکراری متدها برخورد کردید؟ یا از Overloading برای ساختن متدهای انعطافپذیرتر در کدهاتون استفاده میکنید؟
🔖 هشتگها:
#CSharp #Programming #Developer #DotNet #OOP #Methods #BestPractices