یک interface(اینترفیس) در زبان سی شارپ تنها شامل تعاریفی از متد ها ، صفت ها ، و رویداد هاست اما فاقد پیاده سازی آنهاست. و این بر عهده کلاس گذاشته شده است که به شیوه ای که خود میخواهد اعضای یک interface را پیاده سازی کند. اینترفیس نگهداری یک برنامه را آسان میکند.
اینترفیس
در سی شارپ ، یک اینترفیس با استفاده از کلمه ی رزرو شده ی interface
تعریف میشود. برای مثال در زیر یک مثال ساده از تعریف یک interface
آمده است. این اینترفیس حاوی تعریف متد Log است. دقت کنید که فقط حاوی تعریف این متد بوده و بدنه ی آن توسط کلاسی که از این اینترفیس استفاده میکند پیاده سازی میشود :
interface ILog
{ void Log(string msgToLog);
}
اکنون کلاس های مختلف با فراهم آوردن بدنه ی متد Log
میتوانند اینترفیس ILog
را پیاده سازی کنند. برای مثال کلاس ConsoleLog
در مثال زیر اینترفیس ILog
با چاپ یک پیغام در خروجی پیاده سازی کرده است ، در حالی که کلاس FileLog
همین پیغام را در یک فایل متنی درج میکند.
اینترفیس را میتوان با استفاده از قاعده ی نوشتاری زیر پیاده سازی کرد :
<class name> : <interface name >
class ConsoleLog: ILog
{ public void Log(string msgToPrint) { Console.WriteLine(msgToPrint); }
}
class FileLog :ILog
{ public void Log(string msgToPrint) { File.AppendText(@"C:\Log.txt").Write(msgToPrint); }
}
اکنون میتوان از هرکدام از کلاس های FileLog
و یا ConsoleLog
شی ایی نمونه سازی کرد :
ILog log = new ConsoleLog();
//Or
ILog log = new FileLog();
پیاده سازی صریح
میتوان یک اینترفیس را با قرار دادن نام آن ، قبل از نام متد به شکلی که در زیر آمده است به صورت صریح پیاده سازی کرد :
class ConsoleLog: ILog
{ public void ILog.Log(string msgToPrint) // explicit implementation { Console.WriteLine(msgToPrint); }
}
تعریف صریح زمانی که کلاسی داریم که چندین اینترفیس را پیاده سازی میکند مفید است. در این صورت کد نوشته شده خوانا تر و پیچیدگی آن کمتر است. و وقتی مفید تر خواهد شد که اینترفیس ها دارای متد های با نام یکسانی باشند.
به خاطر داشته باشید که :
- یک Interface تنها شامل تعاریف متد ها ، رویداد ها و صفات است.
- یک Interface میتواند به صورت صریح و یا ضمنی پیاده سازی شود
- یک Interface نمیتواند شامل اعضای private باشد. تمام اعضای یک اینترفیس به صورت پیشفرض public هستند.