Interface ها در سی شارپ
یک رابط (interface) کاملاً "کلاس انتزاعی" است که فقط می تواند شامل متدها و خصوصیات انتزاعی باشد (با بدنه خالی):
interface Animal
{
void animalSound(); // interface method (does not have a body)
void run(); // interface method (does not have a body)
}
به طور پیش فرض ، اعضای یک interface انتزاعی و عمومی هستند.
توجه: رابط ها می توانند حاوی پراپرتی ها(خصوصیات) و متدها باشند ، اما فیلدها نیستند.
برای دستیابی به متدهای رابط ، رابط باید "پیاده سازی" شود (مثل ارث بری) توسط کلاس دیگری. برای پیاده سازی یک رابط ، از نماد : (درست مثل وراثت) استفاده کنید. بدنه متد رابط توسط کلاس "implement" ارائه می شود. توجه داشته باشید که هنگام اجرای یک رابط ، نیازی به استفاده از کلمه کلیدی override نیست:
// Interface
interface IAnimal
{
void animalSound(); // interface method (does not have a body)
}
// Pig "implements" the IAnimal interface
class Pig : IAnimal
{
public void animalSound()
{
// The body of animalSound() is provided here
Console.WriteLine("The pig says: wee wee");
}
}
class Program
{
static void Main(string[] args)
{
Pig myPig = new Pig(); // Create a Pig object
myPig.animalSound();
}
}
نکات مربوط به رابط ها:
- مانند کلاسهای انتزاعی ، از رابط ها نمی توان برای ایجاد اشیا استفاده کرد (در مثال بالا ، ایجاد یک شی "Animal" در کلاس Program امکان پذیر نیست)
- متدهای رابط دارای بدنه نیستند - بدنه توسط کلاس "پیاده سازی" ارائه می شود
- هنگام اجرای یک رابط ، باید تمام متدهای آن را نادیده بگیرید
- رابط ها می توانند حاوی خصوصیات و متدها باشند ، اما شامل فیلدها یا متغیرها نیستند
- اعضای رابط بصورت پیش فرض انتزاعی و عمومی هستند
- یک رابط نمی تواند حاوی سازنده باشد (زیرا برای ایجاد اشیا قابل استفاده نیست)
چرا و چه زمانی باید از رابط استفاده کرد؟
برای دستیابی به امنیت - جزئیات خاصی را پنهان کنید و فقط جزئیات مهم یک شی (رابط) را نشان دهید.
C# از "چندین وراثت" پشتیبانی نمی کند (یک کلاس فقط می تواند از یک کلاس پایه ارث بری کند). با این وجود ، می توان با رابط ها به آن دست یافت ، زیرا کلاس می تواند چندین رابط را پیاده سازی کند. توجه: برای پیاده سازی چندین رابط ، آنها را با کاما جدا کنید (به مثال زیر مراجعه کنید).
Interfaces چند گانه
برای پیاده سازی چندین رابط ، آنها را با کاما جدا کنید:
interface IFirstInterface
{
void myMethod(); // interface method
}
interface ISecondInterface
{
void myOtherMethod(); // interface method
}
// Implement multiple interfaces
class DemoClass : IFirstInterface, ISecondInterface
{
public void myMethod()
{
Console.WriteLine("Some text..");
}
public void myOtherMethod()
{
Console.WriteLine("Some other text...");
}
}
class Program
{
static void Main(string[] args)
{
DemoClass myObj = new DemoClass();
myObj.myMethod();
myObj.myOtherMethod();
}
}