কম্পিউটার টিউটোরিয়াল

C#-তে অপশনাল প্যারামিটার কী?

ডিফল্টভাবে মেথডের সব প্যারামিটার প্রয়োজনীয় (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-তে ডিফল্ট ভ্যালু পরিবর্তন করলে ব্রেকিং চেঞ্জ হতে পারে।
  1. C#-এ প্যারামিটার/প্যারাম অ্যারে কী?

  2. C#-এ অ্যারে (Array) কী?

  3. জাভা ৯-এ Optional.stream() মেথডের ব্যবহার

  4. জাভাতে ফাইনাল প্যারামিটার কী