এক ইন্টারফেস একটি কনট্রাক্ট ডিফাইন করে যা একটি ক্লাস বা স্ট্রাকচার দ্বারা ইম্প্লিমেন্ট করা হবে। এতে মেথড, প্রোপার্টি, ইভেন্ট, এবং ইনডেক্সার থাকতে পারে। একটি ইন্টারফেস একটি ক্লাসের মতো কিন্তু এটি কোনো ডেটা ধারণ করে না এবং শুধু নির্দিষ্ট করে যে এটি কী আচরণ করতে পারে (বা আরও সঠিকভাবে, যা এটি ইম্প্লিমেন্ট করে সে ক্লাস কী আচরণ করতে পারে)।
এক ক্লাস এক বা একাধিক ইন্টারফেস ইম্প্লিমেন্ট করতে পারে। একটি ইন্টারফেস মেম্বার ইম্প্লিমেন্ট করতে, ক্লাসে একটি পাবলিক মেম্বার থাকতে হবে যেটির মেথড ডেফিনিশন ইন্টারফেস মেম্বারের সাথে একই, অর্থাৎ একই নাম এবং সিগনেচার।
উদাহরণস্বরূপ, IComparer System.Collections নেমস্পেসে ডিফাইন একটি ইন্টারফেস যা দুটি অবজেক্ট কমপেয়ার করার মেথডের কনট্রাক্ট ডিফাইন করে। Car ক্লাস IComparer ইন্টারফেস ইম্প্লিমেন্ট করে।
public interface IDriver{ void Drive(); } public class Car : IDriver{ public string Name { get; set; } public int Speed { get; set; } public void Drive(){ Console.WriteLine($"{Name}: {Speed}"); } }এক ইন্টারফেসের সব মেম্বার ইম্প্লিসিটলি অ্যাবস্ট্রাক্ট এবং কোনো ইম্প্লিমেন্টেশন ডিটেইল নেই। সব ইন্টারফেস মেম্বার পাবলিক। আপনি ইন্টারফেস মেম্বারের সাথে অ্যাক্সেস মডিফায়ার ব্যবহার করতে পারবেন না। ইন্টারফেস ইম্প্লিমেন্ট করার ক্লাসকে ইন্টারফেস ইম্প্লিমেন্ট করার পাবলিক মেথড প্রদান করতে হবে।
এক ইন্টারফেস অন্য ইন্টারফেস এক্সটেন্ড করতে পারে, উদাহরণস্বরূপ —
public interface IPerformer { void Perform(); } public interface ISinger : IPerformer{ void Sing(); }ইন্টারফেস আপনাকে এক ক্লাসে একাধিক সোর্স থেকে আচরণ অন্তর্ভুক্ত করতে দেয়। যেহেতু C# C++-এর মত মাল্টিপল ইনহেরিটেন্স অনুমতি দেয় না, ইন্টারফেস C#-তে মাল্টিপল ইনহেরিটেন্স অর্জনের একটি উপায়।
ইন্টারফেসের একটি ড্রব্যাক হলো API এক্সপোজ করার ক্ষেত্রে সেগুলো ক্লাসের চেয়ে কম ফ্লেক্সিবল। যখন আপনি একটি ইন্টারফেসের কনট্রাক্ট পরিবর্তন করেন, সেই ইন্টারফেস ইম্প্লিমেন্ট করার সব ক্লাস ব্রেক হয়ে যায় এবং তাদের আপডেট করে ইন্টারফেস ইম্প্লিমেন্ট করতে হয়।
উদাহরণ
using System; class Program{ static void Main(){ var carOne = new Car { Name = "Honda", Speed = 100 }; var carTwo = new Car { Name = "Toyota", Speed = 70 }; carOne.Drive(); carTwo.Drive(); } } public interface IDriver{ void Drive(); } public class Car : IDriver{ public string Name { get; set; } public int Speed { get; set; } public void Drive(){ Console.WriteLine($"{Name}: {Speed}"); } }আউটপুট
Honda: 100 Toyota: 70