Interface در #C
4 دقیقه برای خواندن
interface مانند یک قرارداد است. در دنیای بشر ، قرارداد بین دو یا چند انسان ، آنها را ملزم می کند که طبق این قرارداد عمل کنند. به همین روش ، interface شامل تعریف یک یا چند متد است.;کلاسی که یک interface را پیاده سازی می کنند باید متدهای موجود در interface را پیاده ساری کنند.در#C ، یک کلاس یا یک ساختار می تواند یک یا چند interface را پیاده سازی کند.
در C # می توان با استفاده از کلید واژه interface ، یک interface تعریف کرد. interface ها می توانند شامل method ها ، properties ، index و events به عنوان اعضای باشند.
interface IPen زیر را در نظر بگیری
Example: An Interface
interface IPen
}
{;string Color { get; set
;()bool Open
;()bool Close
;(void Write(string text
{
در C # ، شما نمی توانید برای هیچ یک از اعضای interface سطح دسترسی تعریف کنید. همه اعضا بطور پیش فرض اعضای public هستند. اگر از یک سطح دسترسی در یک interface استفاده کنید ، کامپایلر C # خطای کامپایل زمان را می دهد "سطح دسنرسی" عمومی / خصوصی / محافظت شده "برای این مورد معتبر نیست". (ویژوال استودیو بلافاصله بدون تدوین خطایی را نشان می دهد.)
در interface شما نمی توانید متدی را گیاده سازی کند ئر این حالت خطای زمان کامپایل را به شما نشان می دهد.
interface IPen
}
{ ;string Color { get; set
bool Open
;()bool Close
}(void Write(string text
Console.Write(text); //error: cannot implement
{اجرای یک interface
یک کلاس یا ساختار می تواند یک یا چند interface را با علامت : پیاده سازی کنند.
Class or Struct Name : Interface Name
class Cello : IPen
}
{; public string Color { get; set
;private bool isOpen = false
()public bool Close
}
;isOpen = false
(;"Console.WriteLine("Cello closed for writing
; return isOpen
{
()public bool Open
}
;isOpen = true
;("Console.WriteLine("Cello open for writing
;return isOpen
(public void Write(string text)
}
//write text if open
(if(isOpen
;( Console.WriteLine("Cello: " + text
{
{
پیاده سازی صریح interface
اجرای صریح زمانی مفید است که کلاس چندین interfce را اجرا می کند و بدین ترتیب قابل خواندن است و سردرگمی را از بین می برد. همچنین اگر interface ها به طور تصادفی نام متد یکسانی با کلاس داشته باشند نیز مفید است
class Cello : IPen
}
{;string IPen.Color { get; set
;private bool isOpen = false
()bool IPen.Close
}
;isOpen = false
;("Console.WriteLine("Cello closed for writing
;return isOpen
}
()bool IPen.Open
{
;isOpen = true
;("Console.WriteLine("Cello open for writing!
;return isOpen
{
(void IPen.Write(string text
}
//write text if open
(if(isOpen
;(Console.WriteLine("Cello: " + text
{
{
اکنون می توانیدشیء کلاس ایجاد کرده و به متغیری از نوع رابط اختصاص دهید.
Example: Interface Type Variable
;()IPen pen1 = new Celloبا همان متغیر می توان از تمام کلاسهایی که رابط IPen را پیاده سازی کرده اند ، بطور مستقیم استفاده کرد.
;()IPen mypen = new Cello
mypen = new Parker(); // assign Parker object to same variableپیاده ساری استفاده از چند interface در یک کلاس
یک کلاس یا ساختار می تواند چندین interface را پیاده سازی کند و باید تمام اعضای همه interfaceها را تعریف کند.
interface IBrandedPen
}
;()string GetBrandName
{
class Parker : IPen, IBrandedPen
}
//Implement all members of IPen and IBrandedPen
{اکنون ، طبق فرم زیر ، می توانید کلاس پارکر یا با IPen interface و یا IBrandedPen بصورت لحظه ای اختصاص دهید.
;()IPen pen1 = new Parker
pen1.Open();// valid
pen1.GetBrandName(); //Compile-time error. Cannot call IBrandedPenmethod on the object of type IPen
;()IBrandedPen pen2 = new Parker
pen2.GetBrandName();// valid
pen2.Open();//Compile-time error. Cannot call IPen method on the object of type IBrandedPenهمانطور که مشاهده می کنید ، یک شی تنها از متدهای interface که به آن اختصاص داده شده است پشتیبانی می کند ، به عنوان مثال. pen1 اختصاص داده شده به IPen ، بنابراین فقط از متد های IPen و نه IBrandedPen پشتیبانی می کند.
یک رابط همچنین می تواند یک یا چند رابط را به ارث ببرد.
interface IPen
}
{;string Color { get; set
;()bool Open
:()bool Close
;(void Write(string text
{
interface IBrandedPen : IPen
}
;()string GetBrandName
{
class Parker : IBrandedPen
}
//Implement all members of IPen and IBrandedPen
{