ডিফল্টভাবে মেথডের সব প্যারামিটার প্রয়োজনীয় (required)। অপশনাল প্যারামিটার থাকলে কলিং টাইমে আর্গুমেন্ট پاس করা বাধ্যতামূলক নয়।
পদ্ধতি ১: ডিফল্ট ভ্যালু (C# 4.0+)
সর্বाधিক সাধারণ ও প্রস্তাবিত পদ্ধতি।
public static void OptionalMethodWithDefaultValue(int value1, int value2 = 5) {
Console.WriteLine($"Sum is {value1 + value2}");
}
// কল:
OptionalMethodWithDefaultValue(5); // value2 = 5 (ডিফল্ট)
OptionalMethodWithDefaultValue(5, 10); // value2 = 10 (ওভাররাইড)
আউটপুট:
Sum is 10 Sum is 15
পদ্ধতি ২: Optional অ্যাট্রিবিউট
using System.Runtime.InteropServices;
public static void OptionalMethodWithAttribute(int value1, [Optional] int value2) {
Console.WriteLine($"Sum is {value1 + value2}");
}
আউটপুট:
Sum is 5 // value2 = 0 (ইন্টের ডিফল্ট) Sum is 15
নোট: [Optional] দিয়ে ডিফল্ট ভ্যালু সেট হয় না, ইন্টের জন্য ০, স্ট্রিং-এর জন্য null হবে। তাই ডিফল্ট ভ্যালু পদ্ধতিই ভালো।
গুরুত্বপূর্ণ নিয়ম
অপশনাল প্যারামিটারগুলো সবসময় প্রয়োজনীয় প্যারামিটারগুলোর পরে থাকতে হবে।
// ✅ সঠিক
void Good(int required, int optional = 5) { }
// ❌ ভুল - কম্পাইল এরর
void Bad(int optional = 5, int required) { }
// Error: Optional parameters must appear after all required parameters
অপশনাল প্যারামিটার ও ওভারলোডিং
// এই দুটো কনফ্লিক্ট করবে
void Foo(int x = 1) { }
void Foo(int x, int y = 2) { } // কম্পাইলার কলিং টাইমে বিভ্রান্ত হয়
উদাহরণ: বাস্তব ব্যবহারের পরিস্থিতি
public class EmailService {
public void Send(
string to,
string subject,
string body,
bool isHtml = false, // অপশনাল
string cc = "", // অপশনাল
string bcc = "", // অপশনাল
int priority = 3 // অপশনাল (1=High, 3=Normal)
) {
// ইমেইল পাঠানোর লজিক
}
}
// কলিং কোড - শুধু প্রয়োজনীয়গুলো দিয়ে
email.Send("user@example.com", "Welcome", "Hello!");
// বা কিছু অপশনাল দিয়ে
email.Send("user@example.com", "Alert", "Down!", isHtml: true, priority: 1);
সতর্কতা
- অপশনাল প্যারামিটারের ডিফল্ট ভ্যালু কলিং অ্যাসেম্বলিতে বেকড হয়। লাইব্রেরি আপডেট করলে কলার রি-কম্পাইল না হলে পুরানো ডিফল্ট ভ্যালুই ব্যবহার হবে।
- পাবলিক API-তে ডিফল্ট ভ্যালু পরিবর্তন করলে ব্রেকিং চেঞ্জ হতে পারে।