الواجهات (مقدمة) وتطبيق واجهات متعددة
عرّف الواجهات بوصفها عقودًا، وطبّق واجهات متعددة في فئة واحدة، واستخدم التعددية الشكلية القائمة على الواجهات، وتعلّم أساسيات التطبيق الصريح للواجهات.
الواجهات (مقدمة) وتطبيق واجهات متعددة درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 2 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 3 دروس في المجموع.
نظرة عامة على الواجهات
الهدف: البرمجة باستخدام الواجهات لإنشاء شيفرة مرنة.
- تعلن الواجهات ما يجب فعله لا كيفية فعله
- تنفيذ واجهات متعددة
- تمرير الواجهات إلى الدوال
- التنفيذ الصريح لحل تعارضات الأسماء
تنفيذ واجهات متعددة
تحدد الواجهات عقدًا. ويمكن لفئة واحدة تنفيذ واجهات متعددة للتعبير عن أدوار مختلفة.
using System;
public interface IPlayable
{
void Play();
}
public interface IHasDuration
{
int DurationSeconds { get; }
}
public class Song : IPlayable, IHasDuration
{
private readonly string _title;
private readonly int _seconds;
public Song(string title, int seconds)
{
_title = title;
_seconds = seconds;
}
public int DurationSeconds { get { return _seconds; } }
public void Play()
{
Console.WriteLine("Playing " + _title + " (" + _seconds + "s)");
}
}
public class Program
{
public static void Main(string[] args)
{
Song s = new Song("Hello", 5);
s.Play();
Console.WriteLine("Duration = " + s.DurationSeconds);
}
}
تعدد الأشكال باستخدام الواجهات
اقبل نوع واجهة في الأساليب. ويمكن للمستدعين تمرير أي تنفيذ لهذه الواجهة.
using System;
public interface IPrintable
{
void Print();
}
public class Report : IPrintable
{
private readonly string _text;
public Report(string text) { _text = text; }
public void Print() { Console.WriteLine("Report: " + _text); }
}
public class Label : IPrintable
{
private readonly string _text;
public Label(string text) { _text = text; }
public void Print() { Console.WriteLine("Label: " + _text); }
}
public class Program
{
// Works with any IPrintable (polymorphism)
static void PrintAll(IPrintable item)
{
item.Print();
}
public static void Main(string[] args)
{
PrintAll(new Report("Sales Q1"));
PrintAll(new Label("Fragile"));
}
}
التنفيذ الصريح
يحل التنفيذ الصريح الغموض بين الأعضاء المتشابهة في الاسم ويخفيها من واجهة الفئة.
using System;
public interface ILogger { void Write(string msg); }
public interface IFileWriter { void Write(string msg); }
public class DualWriter : ILogger, IFileWriter
{
// Explicit implementations: only visible via the interface reference
void ILogger.Write(string msg) { Console.WriteLine("[LOG] " + msg); }
void IFileWriter.Write(string msg) { Console.WriteLine("[FILE] " + msg); }
public void Demo()
{
Console.WriteLine("DualWriter ready");
}
}
public class Program
{
public static void Main(string[] args)
{
DualWriter dw = new DualWriter();
dw.Demo();
ILogger log = dw;
IFileWriter file = dw;
log.Write("started");
file.Write("saved");
}
}
مجموعات الواجهات
خزّن التطبيقات المختلفة في قائمة من نوع الواجهة، وتكرّر عليها بطريقة موحّدة.
using System;
using System.Collections.Generic;
public interface ITask
{
void Run();
}
public class EmailTask : ITask
{
public void Run() { Console.WriteLine("Send email"); }
}
public class BackupTask : ITask
{
public void Run() { Console.WriteLine("Run backup"); }
}
public class Program
{
public static void Main(string[] args)
{
List<ITask> tasks = new List<ITask>();
tasks.Add(new EmailTask());
tasks.Add(new BackupTask());
foreach (ITask t in tasks)
{
t.Run(); // calls the right implementation
}
}
}
نصائح الواجهات
نصائح:
- فضّل الواجهات الصغيرة التي تصف دورًا واحدًا.
- استخدم الواجهات للاختبار (لتبديل التطبيقات).
- في C# 6 لا تحتوي الواجهات على حقول أو أجسام أساليب.
- نفّذ واجهات متعددة لتركيب السلوكيات.
مفهوم الواجهات
مراجعة
مراجعة: الواجهات عقود، وتدعم التنفيذ المتعدد لكل فئة. مرّر الواجهات إلى الدوال، واجعلها صغيرة، واستخدم التنفيذ الصريح لحل التعارضات.
الأسئلة الشائعة
هل درس «الواجهات (مقدمة) وتطبيق واجهات متعددة» مجاني؟
نعم — نص درس «الواجهات (مقدمة) وتطبيق واجهات متعددة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 3 دروس في المجموع.
ماذا ستتعلم في «الواجهات (مقدمة) وتطبيق واجهات متعددة»؟
عرّف الواجهات بوصفها عقودًا، وطبّق واجهات متعددة في فئة واحدة، واستخدم التعددية الشكلية القائمة على الواجهات، وتعلّم أساسيات التطبيق الصريح للواجهات. تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 3.
كم من الوقت يستغرق درس «الواجهات (مقدمة) وتطبيق واجهات متعددة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- virtual وoverride وsealed؛ الفئات المجرّدة
- الواجهات (مقدمة) وتطبيق واجهات متعددة
- التعددية الشكلية والإرسال الديناميكي