ইন্টারফেস হলো এমন একটি টাইপ, যার মেম্বারগুলো সম্পর্কিত কিছু ফাংশনালিটির একটি গ্রুপ নির্ধারণ করে। এটি ক্লাসের ব্যবহারকে ইমপ্লিমেন্টেশন থেকে আলাদা রাখে, যার ফলে একাধিক ভিন্ন ইমপ্লিমেন্টেশন সম্ভব হয়, অথবা ফরম্যাটিং, তুলনা বা কনভার্সনের মতো কিছু জেনেরিক আচরণ সমর্থন করা যায়।
ইন্টারফেসের সিনট্যাক্স ক্লাস বা স্ট্রাক্টের মতোই, শুধু পার্থক্য হলো এখানে মেথড ও প্রপার্টি কেবল সিগনেচার হিসেবে থাকে, কোনো বডি দেওয়া হয় না।
public interface ILanguage
{
string LanguageName { get; set; }
string Speak();
}
public class ItalianTaveller : ILanguage, ICloneable
{
public string LanguageName { get; set; } = "Italiano";
public string Speak()
{
return "Ciao mondo";
}
public object Clone()
{
ItalianTaveller it = new ItalianTaveller();
it.LanguageName = this.LanguageName;
return it;
}
}
ইন্টারফেসে নির্ধারিত সব অপারেশন ইমপ্লিমেন্ট করতে হয়।
ইন্টারফেসে ইনস্ট্যান্স মেথড ও প্রপার্টির পাশাপাশি অন্যান্য মেম্বারও থাকতে পারে।
একটি অবজেক্টকে অন্য একটি অবজেক্টের সাথে তুলনা করার সুযোগ দিতে হলে, এটিকে IComparable<T> ইন্টারফেসটি ইমপ্লিমেন্ট করতে হবে।
এই ইন্টারফেসে ইমপ্লিমেন্ট করার জন্য একটি মাত্র মেথড আছে: int CompareTo(T other)।
CompareTo মেথডের রিটার্ন ভ্যালু তিন রকম হতে পারে:
এই অনুশীলনীতে আপনি রিমোট কন্ট্রোল গাড়ি নিয়ে আরও কিছু কাজ করবেন।
একটি এক্সপেরিমেন্টাল গাড়ি তৈরি করা হয়েছে, আর এখন টেস্ট ট্র্যাকটি প্রোডাকশন ও এক্সপেরিমেন্টাল, দুই ধরনের মডেলই সামলানোর উপযোগী করে বদলাতে হবে। দুই ধরনের গাড়িই তৈরি হয়ে গেছে, এবং টেস্ট ট্র্যাকে দুটোকেই কীভাবে সামলাবেন, তার একটি উপায় আপনাকে খুঁজে বের করতে হবে।
এর সঙ্গে প্রোডাকশন গাড়িগুলোও কিছুটা সফল হতে শুরু করেছে। প্রতিযোগিতার মনোভাব ধরে রাখতে টিমের বস প্রোডাকশন গাড়িগুলোর একটি র্যাঙ্কিং প্রকাশ করতে চান।
IRemoteControlCar ইন্টারফেসে একটি মেথড যোগ করুন, যাতে দুই ধরনের গাড়ির Drive()-এর ইমপ্লিমেন্টেশন প্রকাশ পায়।
TestTrack.Race(new ProductionRemoteControlCar());
TestTrack.Race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown
IRemoteControlCar ইন্টারফেসে একটি প্রপার্টি যোগ করুন, যাতে দুই ধরনের গাড়ির DistanceTravelled প্রপার্টির ইমপ্লিমেন্টেশন প্রকাশ পায়।
var prod = new ProductionRemoteControlCar();
TestTrack.Race(prod);
var exp = new ExperimentalRemoteControlCar();
TestTrack.Race(exp);
prod.DistanceTravelled
// => 10
exp.DistanceTravelled
// => 20
ProductionRemoteControlCar ক্লাসে IComparable<T> ইন্টারফেসটি ইমপ্লিমেন্ট করুন। গাড়িগুলোর ডিফল্ট সাজানোর ক্রম হবে জয়ের সংখ্যার ঊর্ধ্বক্রম।
পাস করা গাড়িগুলোকে জয়ের সংখ্যার ঊর্ধ্বক্রমে সাজিয়ে ফেরত দিতে static TestTrack.GetRankedCars() ইমপ্লিমেন্ট করুন।
var prc1 = new ProductionRemoteControlCar();
var prc2 = new ProductionRemoteControlCar();
prc1.NumberOfVictories = 3;
prc2.NumberOfVictories = 2;
var rankings = TestTrack.GetRankedCars(prc1, prc2);
// => rankings[1] == prc1
Exercism-এ সাইন আপ করুন, C# ট্র্যাকের 62টি কনসেপ্ট178টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।