ما هي الواجهة في C# مع مثال
⚡ ملخص ذكي
تُعرّف الواجهة في لغة C#tracيحدد هذا الأمر الطرق والخصائص التي يجب على الفئة تنفيذها، دون تقديم الكود الفعلي. توفر الفئة المنفذة السلوك الملموس، مما يتيح الترابط المرن والوراثة المتعددة عبر أنواع غير مترابطة.
ما هي الواجهة في C #؟
An السطح البيني في لغة C#، يتم استخدامها مع فئة لتعريف contracوهي اتفاقية تحدد ما ستقدمه الفئة للتطبيق. تحدد الواجهة العمليات التي يمكن للفئة تنفيذها، وتُعلن عن خصائصها وأساليبها. ويقع على عاتق الفئة تحديد وظيفة كل أسلوب بدقة.
دعونا نلقي نظرة على مثال للواجهة عن طريق تغيير الفئات في تطبيق وحدة التحكم الخاص بنا. لاحظ أننا لن نقوم بتشغيل الكود لأنه لا يوجد شيء يمكن تشغيله باستخدام الواجهة.
مثال على واجهة C#
لنقم بإنشاء فئة واجهة. سيتم تسمية الفئة "Guru"99Interface". سيقوم صنفنا الرئيسي بعد ذلك بتوسيع الواجهة المُعرّفة. يجب كتابة جميع التعليمات البرمجية في ملف Program.cs.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { interface IGuru99Interface { void SetTutorial(int pID, string pName); String GetTutorial(); } class Guru99Tutorial : IGuru99Interface { protected int TutorialID; protected string TutorialName; public void SetTutorial(int pID, string pName) { TutorialID = pID; TutorialName = pName; } public String GetTutorial() { return TutorialName; } static void Main(string[] args) { Guru99Tutorial pTutor = new Guru99Tutorial(); pTutor.SetTutorial(1,".Net by Guru99"); Console.WriteLine(pTutor.GetTutorial()); Console.ReadKey(); } } }
Code تفسير:-
نوضح هنا الأقسام المهمة من الكود
- نقوم أولاً بتعريف واجهة تسمى "Guru99Interface." لاحظ أن الكلمة المفتاحية "interface" تُستخدم لتعريف واجهة.
- بعد ذلك، نقوم بتحديد الأساليب التي ستستخدمها واجهتنا. في هذه الحالة، نقوم بتحديد نفس الأساليب المستخدمة في جميع الأمثلة السابقة. لاحظ أن الواجهة تعلن فقط عن الأساليب، ولا تحدد الكود الموجود فيها.
- ثم نقوم بعملنا Guruتُوسّع فئة 99Tutorial الواجهة. هنا نكتب الكود الذي يُعرّف الطرق المختلفة المُعلنة في الواجهة. يُحقق هذا النوع من البرمجة ما يلي:
- يضمن ذلك أن الفصل الدراسي، Guruلا يضيف 99Tutorial سوى الكود الضروري لطرق "SetTutorial" و "GetTutorial" ولا شيء آخر.
- كما يضمن ذلك أن تتصرف الواجهة مثل عملية احتيالtracر. ال فئة يجب عليه الالتزام بالعقدtracت. لذلك إذا كان المقنعtracإذا كان من المفترض أن يحتوي على طريقتين تسمى "SetTutorial" و "GetTutorial"، فهذا هو الوضع الصحيح.
واجهة C# مقابل Abstracفئة t
من الأسئلة الشائعة للمبتدئين: كيف تختلف واجهة C# عن... (ABS)tracفئة tكلاهما يُعرّفان عملية احتيالtracمع أن الأنواع الأخرى تتبعها، إلا أنها تخدم أهداف تصميم مختلفة.
فيما يلي أبرز الاختلافات:
- التنفيذ: تحتوي الواجهة على التصريحات فقط، بينما تحتوي الواجهة المطلقة على التصريحات فقط.tracيمكن أن توفر الفئة t كلاً منtracأعضاء الفريق والأساليب المطبقة بالكامل.
- الميراث المتعدد: يمكن للفئة أن تُنفذ العديد من الواجهات، ولكن لا يمكنها أن ترث إلا واجهة واحدة مطلقة.tracالفئة t.
- المنطقة: عضلات بطنtracيمكن للفئة t أن تحتوي على الحقول والمنشئات والخصائص مع البيانات، بينما لا يمكن للواجهة تخزين حالة المثيل.
- مُعدِّلات الوصول: ABStracيمكن أن تكون أعضاء الفئة t عامة أو محمية أو خاصة، بينما أعضاء الواجهة الكلاسيكية عامة ضمنيًا.
- حالة الاستخدام: استخدم واجهة لإضافة إمكانية عبر أنواع غير مترابطة، وقيمة مطلقةtracفئة t لمشاركة التعليمات البرمجية المشتركة بين الأنواع ذات الصلة الوثيقة.
باختصار، تصف الواجهة ما يمكن أن يفعله الصنف، بينما يصف العنصر المطلقtracيمكن لفئة t أيضًا تحديد جزء من كيفية القيام بذلك.
كيفية تطبيق واجهات متعددة في لغة C#
على عكس وراثة الفئات، تسمح لغة C# لفئة واحدة بتنفيذ أكثر من واجهة. هكذا توفر اللغة شكلاً آمناً من الوراثة المتعددة دون الغموض الذي ينشأ عن وراثة عدة فئات أساسية في آن واحد.
لتطبيق عدة واجهات، اذكرها بعد اسم الصنف وافصل بينها بفاصلة. يجب على الصنف بعد ذلك تعريف كل دالة مُعلنة في كل واجهة يطبقها.
الخطوة 1) قم بتعريف واجهتين، لكل منهما طريقتها الخاصة.
الخطوة 2) أنشئ فئة تُنفذ كلا الواجهتين، مع فصل أسماء الواجهات بفاصلة.
الخطوة 3) قم بتوفير جسم دالة لكل عضو مُعلن عنه في كل واجهة.
يوضح المثال أدناه فئة المستند التي تنفذ كلاً من IReadable وواجهة IWritable.
using System; namespace DemoApplication { interface IReadable { void Read(); } interface IWritable { void Write(); } class Document : IReadable, IWritable { public void Read() { Console.WriteLine("Reading the document"); } public void Write() { Console.WriteLine("Writing to the document"); } static void Main(string[] args) { Document doc = new Document(); doc.Read(); doc.Write(); Console.ReadKey(); } } }
Code تفسير:-
- نُعلن عن واجهتين، IReadable و IWritable. كل واجهة تُعلن عن طريقة واحدة بدون جسم.
- تُدرج فئة المستند كلا الواجهتين بعد النقطتين، مفصولتين بفاصلة، لذا فهي توافق على احترام كليهماtracالخبر.
- ثم يُعرّف الصنف طريقتي القراءة والكتابة. تخطّيping كلا الطريقتين ستؤديان إلى حدوث خطأ أثناء الترجمة.
- تقوم الدالة الرئيسية بإنشاء كائن Document وتستدعي كلا الدالتين، مما يثبت أن الفئة تفي بالواجهتين.
عند تشغيل البرنامج، يقوم بطباعة قراءة الوثيقة في السطر الأول و الكتابة على المستند في السطر الثاني. يحافظ هذا النمط على كل اتصالtracصغيرة ومركزة، مما يجعل فئة المستند أسهل في الاختبار والتوسيع.
مزايا استخدام الواجهات في لغة C#
تُستخدم الواجهات على نطاق واسع في مشاريع C# الاحترافية لأنها تجعل الكود مرنًا وأسهل في الصيانة. فهي تتيح لك البرمجة وفقًا لـtracبدلاً من فئة محددة.
تشمل المزايا الرئيسية ما يلي:
- اقتران فضفاض: Code يعتمد ذلك على الواجهة، وليس على فئة محددة، لذا يمكن تغيير التنفيذ دون تعطيل المتصلين.
- الميراث المتعدد: يمكن للفئة أن ترث سلوكًا من عدة واجهات، وهو ما لا يسمح به التوريث البسيط للفئات.
- قابلية الاختبار: تُسهّل الواجهات استبدال فئة حقيقية بكائن وهمي أثناء اختبار الوحدة.
- حقن التبعية: تقوم الأطر البرمجية بإدخال تطبيق واجهة في وقت التشغيل، وهي فكرة أساسية وراء مبادئ SOLID.
- الاتساق: يُجبر كل صنف تنفيذي على توفير نفس مجموعة الأعضاء، مما يحافظ على قابلية التنبؤ بواجهة برمجة التطبيقات.
وبسبب هذه المزايا، تُعتبر الواجهات في صميم معظم أنماط تصميم لغة C# الحديثة وأطر التطبيقات.


