تنفيذ أعضاء واجهة صريحة في فئة

مكتمل

في C#، يسمح تنفيذ الواجهة الصريحة للفئة بتنفيذ أعضاء الواجهة بطريقة يمكن الوصول إليها فقط من خلال الواجهة، وليس مثيل الفئة. يكون هذا مفيدا عندما تنفذ فئة واجهات متعددة مع أعضاء لديهم نفس التوقيع.

واجهات متعددة في فئة

يمكن لفئة في C# تنفيذ واجهات متعددة، ما يسمح لها بتوريث السلوك من مصادر مختلفة. تعد القدرة على الجمع بين واجهات متعددة أمرا بالغ الأهمية لأن C# لا يدعم التوريث المتعدد للفئات. يسمح تنفيذ واجهات متعددة للفئة بميزات مختلفة ويضمن أنها تتبع القواعد التي تم تعيينها بواسطة تلك الواجهات.

  • تحدد الواجهات مجموعة من الوظائف ذات الصلة.
  • يجب أن تنفذ الفئة أو البنية جميع أعضاء الواجهات التي ترثها.
  • يمكن أن تحتوي الواجهات على أساليب وخصائص وأحداث ومفهرسات.

فيما يلي واجهتان بسيطتان لمثالنا:

public interface IEnglishDimensions
{
    float Length();
    float Width();
}

public interface IMetricDimensions
{
    float Length();
    float Width();
}

أعضاء واجهة صريحة

في C#، يمكن أن ترث الفئة من فئة واحدة فقط ولكن يمكنها تنفيذ واجهات متعددة. هذا مهم بشكل خاص عندما يكون للعديد من الواجهات نفس أسماء الأعضاء. لتجنب الارتباك، نستخدم تنفيذ واجهة صريحة.

يضمن تنفيذ الواجهة الصريحة أن يكون لكل عضو في الواجهة تطبيق فريد، ما يمنع التعارضات. كما يوضح الواجهة التي ينتمي إليها العضو عندما تنفذ فئة واجهتين أو أكثر بنفس أسماء الأعضاء. يسمح تنفيذ الواجهة الصريحة لفئة بالوفاء بمتطلبات واجهات متعددة، ما يوفر وظائف متنوعة.

لتنفيذ عضو في واجهة بشكل صريح، يمكنك إضافة اسم الواجهة ونقطة قبل اسم العضو. إليك مثال:

public class Box : IEnglishDimensions, IMetricDimensions
{
    float IEnglishDimensions.Length()
    {
        return 30.0f;
    }

    float IEnglishDimensions.Width()
    {
        return 20.0f;
    }

    float IMetricDimensions.Length()
    {
        return 76.2f;
    }

    float IMetricDimensions.Width()
    {
        return 50.8f;
    }
}

في هذه التعليمة البرمجية Box ، تقوم الفئة بتنفيذ واجهتين: IEnglishDimensions و IMetricDimensions. تحتوي كلتا الواجهتين على أعضاء باسم Length و Width. لتجنب الارتباك، يرتبط كل عضو بشكل صريح بواجهته.

إشعار

لا يملك أعضاء الواجهة المنفذة بشكل صريح معدلات وصول مثل public، private، وما إلى ذلك. يمكن الوصول إليها فقط من خلال مثيل الواجهة، وليس الفئة. وهذا يعني أنه لا يمكنك استدعاء Box.Length()، ولكن يمكنك الاتصال IEnglishDimensions.Length() إذا كان لديك مثيل Box يتم التعامل معه على IEnglishDimensionsأنه .

استخدام أعضاء واجهة صريحة

تحتاج إلى إنشاء مثيلات من الواجهات واستدعاء أعضائها لتنفيذ واختبار التعليمات البرمجية التي تستخدم أعضاء الواجهة الصريحة. وهذا يضمن استدعاء التنفيذ الصحيح استنادا إلى نوع الواجهة.

Box box = new Box();
IEnglishDimensions eDimensions = box;
IMetricDimensions mDimensions = box;

Console.WriteLine($"Length in inches: {eDimensions.Length()}");
Console.WriteLine($"Width in inches: {eDimensions.Width()}");
Console.WriteLine($"Length in centimeters: {mDimensions.Length()}");
Console.WriteLine($"Width in centimeters: {mDimensions.Width()}");

في هذا المثال، Box يتم تحويل مثيل الفئة إلى كل من IEnglishDimensions و IMetricDimensions للوصول إلى أعضاء الواجهة الصريحة. يعرض الإخراج الأبعاد في كل من وحدات اللغة الإنجليزية والمقاييس.

Length in inches: 30
Width in inches: 20
Length in centimeters: 76.2
Width in centimeters: 50.8

في C#، يمكنك تنفيذ واجهات متعددة في فئة، باستخدام تنفيذ واجهة صريحة لحل تعارضات التسمية عندما يكون للأعضاء التوقيعات نفسها. يتم الوصول إلى الأعضاء المنفذين بشكل صريح من خلال مثيل الواجهة، وليس مثيل الفئة، ما يضمن الوظائف المناسبة وتجنب الغموض. يعزز هذا الأسلوب إمكانية الحفاظ على التعليمات البرمجية من خلال تحديد السلوك المقصود لكل واجهة بوضوح، ما يجعل قاعدة التعليمات البرمجية أسهل في الفهم والتوسيع.