যখন একটি ক্লাস দুটি ইন্টারফেস ইমপ্লিমেন্ট করে এবং উভয়ে একই সিগনেচারের মেম্বার থাকে, তবে সাধারণ (ইম্প্লিসিট) ইমপ্লিমেন্টেশন দিয়ে শুধু একটি মেথড থেকে দুটি ইন্টারফেস সেটিসফাই হয়। আলাদা আলাদা বিয়ের জন্য এক্সপ্লিসিট ইমপ্লিমেন্টেশন দরকার।
সিনট্যাক্স
void InterfaceName.MethodName() {
// ইমপ্লিমেন্টেশন
}
নোট: এক্সপ্লিসিট মেম্বার পাবলিক নয়, শুধু ইন্টারফেস রেফারেন্সের মাধ্যমে অ্যাক্সেসযোগ্য।
উদাহরণ
interface ICar {
void Display();
}
interface IBike {
void Display();
}
class ShowRoom : ICar, IBike {
// এক্সপ্লিসিট ইমপ্লিমেন্টেশন - ICar-এর জন্য
void ICar.Display() {
Console.WriteLine("Car Display Logic");
}
// এক্সপ্লিসিট ইমপ্লিমেন্টেশন - IBike-এর জন্য
void IBike.Display() {
Console.WriteLine("Bike Display Logic");
}
}
class Program {
static void Main() {
ShowRoom sr = new ShowRoom();
// sr.Display(); // ❌ কম্পাইল এরর - Display() পাবলিক নয়
// ইন্টারফেস রেফারেন্স দিয়ে কল করতে হবে
ICar car = sr;
car.Display(); // Output: Car Display Logic
IBike bike = sr;
bike.Display(); // Output: Bike Display Logic
// কাস্টিং দিয়েও কল করা যায়
((ICar)sr).Display();
((IBike)sr).Display();
Console.ReadKey();
}
}
কখন ব্যবহার করবেন?
- নেম কলিশন এড়াতে: একাধিক ইন্টারফেসে একই সিগনেচারের মেম্বার থাকলে
- ইন্টারফেস-স্পেসিফিক লজিক: একই মেথডের ভিন্ন বিয়ের দরকার হলে
- এনক্যাপসুলেশন: ক্লাসের পাবলিক API-তে মেথড এক্সপোজ করা না চাইলে
- লিগেসি কোড সাপোর্ট: পুরানো ইন্টারফেস বাদ দিয়ে নতুন ব্যবহার করতে চাইলে
ইম্প্লিসিট vs এক্সপ্লিসিট তুলনা
| বিষয় | ইম্প্লিসিট | এক্সপ্লিসিট |
|---|---|---|
| অ্যাক্সেস মডিফায়ার | public (বাধ্যতামূলক) | নেই (private-সদৃশ) |
| কলিং পদ্ধতি | obj.Method() | ((IInterface)obj).Method() |
| ইন্টারফেস কলিশন | হ্যান্ডেল করা যায় না | হ্যান্ডেল করা যায় |
| দৃশ্যমানতা | IntelliSense-এ দেখায় | IntelliSense-এ দেখায় না (ইন্টারফেস টাইপে দেখাবে) |
মিক্সড ব্যবহার
interface ILogger {
void Log(string msg);
}
class MyLogger : ILogger {
// ইম্প্লিসিট - পাবলিক API হিসেবে এক্সপোজড
public void Log(string msg) {
Console.WriteLine($"[LOG] {msg}");
}
// এক্সপ্লিসিট - ইন্টারফেস কন্ট্রাক্ট পূরণ
void ILogger.Log(string msg) {
Log($"[ILogger] {msg}"); // ইন্টারনাল মেথড কল
}
}