C# – رابطها (Interfaces)
رابطها در C#
یکی دیگر از روشهای دستیابی به انتزاع (Abstraction) در C# استفاده از رابطها (Interfaces) است.
یک رابط (Interface) بهطور کامل یک “کلاس انتزاعی” است که تنها میتواند شامل متدها و ویژگیهای انتزاعی (بدون بدنه) باشد.
تعریف رابط
رابطها تنها شامل متدها و ویژگیهایی هستند که بدنه ندارند. این متدها باید در کلاسهایی که رابط را پیادهسازی میکنند، پیادهسازی شوند.
مثال:
using System;
// رابط
interface IAnimal // رابط (Interface)
{
void animalSound(); // متد رابط (بدنه ندارد)
void run(); // متد رابط (بدنه ندارد)
}
نکات درباره رابطها
-
پیشوند “I”: بهطور معمول، پیشوند “I” (برای مثال
IAnimal
) در نام رابطها استفاده میشود تا مشخص شود که این یک رابط است و نه یک کلاس. این کار به یادآوری آسانتر کمک میکند. -
ویژگیها و متدها: رابطها میتوانند شامل ویژگیها و متدها باشند، اما نمیتوانند شامل فیلدها (fields) باشند.
-
متدهای رابط: متدهای رابط بدنه ندارند. بدنه این متدها باید در کلاسهایی که رابط را پیادهسازی میکنند، ارائه شود. برای پیادهسازی رابط از کلیدواژه
:
استفاده میشود، مشابه وراثت (Inheritance). نیازی به استفاده از کلیدواژهoverride
نیست. -
محدودیتها:
- عدم توانایی در ایجاد شیء: مانند کلاسهای انتزاعی، نمیتوان از رابطها شیء مستقیم ایجاد کرد. (در مثال بالا، ایجاد شیء از
IAnimal
ممکن نیست.) - عدم پشتیبانی از سازندهها: رابطها نمیتوانند سازنده (constructor) داشته باشند زیرا نمیتوان از آنها شیء ایجاد کرد.
- پیشفرضها: اعضای رابط بهطور پیشفرض انتزاعی (abstract) و عمومی (public) هستند.
- عدم توانایی در ایجاد شیء: مانند کلاسهای انتزاعی، نمیتوان از رابطها شیء مستقیم ایجاد کرد. (در مثال بالا، ایجاد شیء از
پیادهسازی رابط
برای پیادهسازی یک رابط، کلاس باید متدهای رابط را پیادهسازی کند. در اینجا یک مثال از پیادهسازی رابط IAnimal
در کلاس Pig
آمده است:
مثال:
using System;
// رابط
interface IAnimal
{
void animalSound(); // متد رابط (بدنه ندارد)
}
// کلاس Pig رابط IAnimal را پیادهسازی میکند
class Pig : IAnimal
{
public void animalSound()
{
// بدنه متد animalSound() در اینجا ارائه میشود
Console.WriteLine("The pig says: wee wee");
}
}
class Program
{
static void Main(string[] args)
{
Pig myPig = new Pig(); // ایجاد شیء از Pig
myPig.animalSound(); // فراخوانی متد پیادهسازی شده
}
}
خروجی:
The pig says: wee wee
چرا و چه زمانی از رابطها استفاده کنیم؟
-
دستیابی به امنیت: با استفاده از رابطها میتوانیم جزئیات خاصی را پنهان کرده و تنها اطلاعات ضروری را برای کاربر نمایش دهیم.
-
وراثت چندگانه: C# از وراثت چندگانه (Multiple Inheritance) پشتیبانی نمیکند (یک کلاس میتواند تنها از یک کلاس پایه به ارث ببرد). با این حال، میتوان از رابطها برای دستیابی به وراثت چندگانه استفاده کرد، زیرا یک کلاس میتواند چندین رابط را پیادهسازی کند. توجه: برای پیادهسازی چندین رابط، آنها را با کاما جدا کنید.
مثال:
using System;
// رابطهای متعدد
interface IAnimal
{
void animalSound(); // متد رابط (بدنه ندارد)
}
interface IMovable
{
void run(); // متد رابط (بدنه ندارد)
}
// کلاس Pig رابطهای IAnimal و IMovable را پیادهسازی میکند
class Pig : IAnimal, IMovable
{
public void animalSound()
{
Console.WriteLine("The pig says: wee wee");
}
public void run()
{
Console.WriteLine("The pig is running");
}
}
class Program
{
static void Main(string[] args)
{
Pig myPig = new Pig(); // ایجاد شیء از Pig
myPig.animalSound(); // فراخوانی متد پیادهسازی شده
myPig.run(); // فراخوانی متد پیادهسازی شده
}
}
خروجی:
The pig says: wee wee
The pig is running
استفاده از رابطها به شما این امکان را میدهد که طراحیهای نرمافزاری را انعطافپذیرتر و مقیاسپذیرتر کنید و به پیادهسازیهای مختلف از یک قرارداد مشترک دست یابید.
برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید. صفحه ورود و ثبت نام