|
صفحه اصلی > مفاهیم کلی شی گرایی > واسطها (Interfaces) «پیشرفته» |
||||||||||||||||||||||||
> واسطها (Interfaces) «پیشرفته» |
واسطها (Interfaces)«پیشرفته» در اين درس با واسطها در زبان C# آشنا خواهيم شد. اهداف اين درس بشرح زير ميباشند :
1) با استفاده از كلمه كليد interface در حقيقت يك نوع مرجعي (Reference Type) جديد ايجاد نمودهايد. 2) از لحاظ نوع ارتباطي كه واسطها و كلاسها در ارثبري ايجاد مينمايند بايد به اين نكته اشاره كرد كه، ارثبري از كلاس رابطه "است" يا "بودن" (is-a relation) را ايجاد ميكند (ماشين يك وسيله نقليه است) ولي ارثبري از يك واسط يا interface نوع خاصي از رابطه، تحت عنوان "پيادهسازي" (implement relation) را ايجاد ميكند. ("ميتوان ماشين را با وام بلند مدت خريد" كه در اين جمله ماشين ميتواند خريداري شدن بوسيله وام را پيادهسازي كند.) 3) فرم كلي اعلان interface ها بشكل زير است : [attributes] [access-modifier] interface interface-name [:base-list] {interface-body} كه اعضاي آن بشرح زير مي باشند :
توجه نماييد كه نميتوان يك واسط را بصورت virtual اعلان نمود.
4) هدف از ايجاد يك interface تعيين توانائيهاييست كه ميخواهيم در يك كلاس وجود داشته باشند. 5) به مثالي در زمينه استفاده از واسطها توجه كنيد : فرض كنيد ميخواهيد واسطي ايجاد نماييد كه متدها و property هاي لازم براي كلاسي را كه ميخواهد قابليت خواندن و نوشتن از/به يك پايگاه داده يا هر فايلي را داشته باشد، توصيف نمايد. براي اين منظور ميتوانيد از واسط IStorable استفاده نماييد. در اين واسط دو متد Read() و Write() وجود دارند كه در بدنه واسط تعريف ميشوند ك interface IStorable { void Read( ); void Write(object); } حال ميخواهيد كلاسي با عنوان Document ايجاد نماييد كه اين كلاس بايد قابليت خواندن و نوشتن از/به پايگاه داده را داشته باشد، پس ميتوانيد كلاس را از روي واسط IStorable پيادهسازي كنيد.
public class Document : IStorable { public void Read( ) {...} public void Write(object obj) {...} // ... } حال بعنوان طراح برنامه، شما وظيفه داري تا به پيادهسازي اين واسط بپردازيد، بطوريكه كليه نيازهاي شما را برآورده نمايد. نمونهاي از اين پيادهسازي در مثال 3-13 آورده شده است.
مثال 3-13 : پيادهسازي واسط و ارثبري – مثال كاربردي using System; // interface اعلان interface IStorable { void Read( ); void Write(object obj); int Status { get; set; } }
public class Document : IStorable { public Document(string s) { Console.WriteLine("Creating document with: {0}", s); }
public void Read( ) { Console.WriteLine("Implementing the Read Method for IStorable"); }
public void Write(object o) { Console.WriteLine("Implementing the Write Method for IStorable"); }
public int Status { get { return status; } set { status = value; } } private int status = 0; }
public class Tester { static void Main( ) { Document doc = new Document("Test Document"); doc.Status = -1; doc.Read( ); Console.WriteLine("Document Status: {0}", doc.Status); IStorable isDoc = (IStorable) doc; isDoc.Status = 0; isDoc.Read( ); Console.WriteLine("IStorable Status: {0}", isDoc.Status); } }
خروجي برنامه نيز بشكل زير است : Output: Creating document with: Test Document Implementing the Read Method for IStorable Document Status: -1 Implementing the Read Method for IStorable IStorable Status: 0
6) در مثال فوق توجه نماييد كه براي متدها واسط IStorable هيچ سطح دسترسي (public,private و ...) در نظر گرفته نشده است. در حقيقت تعيين سطح دسترسي باعث ايجاد خطا ميشود چراكه هدف اصلي از ايجاد يك واسط ايجاد شيء است كه تمامي اعضاي آن براي تمامي كلاسها قابل دسترسي باشند.
7) توجه نماييد كه از روي يك واسط نميتوان نمونهاي جديد ايجاد كرد بلكه بايد كلاسي از آن ارثبري نمايد.
8) كلاسي كه از واسط ارثبري ميكند بايد تمامي متدهاي آنرا دقيقا همان گونه كه در واسط مشخص شده پيادهسازي نمايد. به بيان كلي، كلاسي كه از يك واسط ارث ميبرد، فرم و ساختار كلي خود را از واسط ميگيرد و نحوه رفتار و پيادهسازي آنرا خود انجام ميدهد. خلاصه : در اين درس با مفاهيم كلي و اصلي درباره واسطها آشنا شديد. هم اكنون ميدانيد كه واسطها چه هستند و سودمندي استفاده از آنها چيست. همچنين نحوه پيادهسازي واسط و ارثبري از آنرا آموختيد. |
![]() |
|||||||||||||||||||||||
![]() |
|||||||||||||||||||||||||
![]() |
|||||||||||||||||||||||||
![]() |
|||||||||||||||||||||||||
![]() |
|||||||||||||||||||||||||
![]() |
|||||||||||||||||||||||||
![]() |
|||||||||||||||||||||||||
![]() |
|||||||||||||||||||||||||
|