PDA

View Full Version : انتساب و نمونه سازی اینترفیس ها



saman2
یک شنبه 21 اسفند 1390, 02:01 صبح
سلام دوستان برنامه نویس.
اینبار سئوال من اینه که اولا کستینگ یک نوع کلاس به نوع اینترفیس و سپس انتساب به اون اینترفیس چه کاربردی میتونه داشته باشه؟
ثانیا، توی کدهایی که من دارم بعد از این کست و انتساب، متدها رو بوسیله اینترفیس فراخوانی کرده مثلا: IPrint.Draw()
این چطوری میشه؟ (مگه اینترفیسها صرفا پروتکلهایی برای تعریف کلی متدها نیستن؟)
اگر سئوال واضح نیست کد بذارم.
پیشاپیش ممنون

Sajjad.Aghapour
سه شنبه 23 اسفند 1390, 08:15 صبح
ثانیا، توی کدهایی که من دارم بعد از این کست و انتساب، متدها رو بوسیله اینترفیس فراخوانی کرده مثلا: IPrint.Draw()
این چطوری میشه؟ (مگه اینترفیسها صرفا پروتکلهایی برای تعریف کلی متدها نیستن؟)


اینکه Interface ها شامل پروتکل های طراحی هستند درست. اما وقتی توسط یک تابع پیاده سازی میشوند دارای رفتاری می شوند که اون تابع پیاده سازی کرده. برای مثال اگه بدین صورت یک Interface تعریف بشه:

public interface IMessage
{
void Show(string text);
}

و توسط یک کلاس به صورت زیر پیاده سازی بشه:

public class Message : IMessage
{
public void Show(string text)
{
MessageBox.Show(text);
}
}

من بعد هر موقع شما با استفاده از کلاس Message به IMessage دسترسی داشته باشید، با فراخوانی متد Show یک دیالوگ به شما نمایش داده خواهد شد. و به این ترتیب تابع Show در IMessage دارای بدنه ای می شه که کلاس Message برای اون پیاده سازی کرده.



اینبار سئوال من اینه که اولا کستینگ یک نوع کلاس به نوع اینترفیس و سپس انتساب به اون اینترفیس چه کاربردی میتونه داشته باشه؟

اما اینکه یک کلاس را به Interfaceی که از اون ارث بری کرده Cast میکنید، یعنی در حقیقت یک نمونه از Interface ایجاد می کنید به جای اینکه از خود کلاس استفاده کنید، مزیت این کار بستگی به جایی داره که این کار انجام می شه. یکی از کاربردهای مهم این روش Dependency Injection هستش. البته وقتی شما یک Interface رو به صورت Explicit در یک کلاس پیاده سازی کنید مجبور به این کار خواهید شد

موفق باشید