تنفيذ واجهة صريح (إرشادات برمجة C#)

إذا كان فئة تنفذ واجهتين اثنتين التي تحتوي على أعضاء بنفس التوقيع، ثم تنفيذ هذا العضو على الفئة يؤدي لاستخدام كلا الواجهتين لهذا العضو و تنفيذها. فعلى سبيل المثال:

interface IControl
{
    void Paint();
}
interface ISurface
{
    void Paint();
}
class SampleClass : IControl, ISurface
{
    // Both ISurface.Paint and IControl.Paint call this method.
    public void Paint()
    {
    }
}

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

public class SampleClass : IControl, ISurface
{
    void IControl.Paint()
    {
        System.Console.WriteLine("IControl.Paint");
    }
    void ISurface.Paint()
    {
        System.Console.WriteLine("ISurface.Paint");
    }
}

يتوفر عضو الفئة IControl.Paint فقط من خلال واجهة IControl و ISurface.Paint ويتوفر فقط من خلال ISurface. تطبيقات الأسلوب كلاها مستقلة، وولا تتوفر مباشرة في الفئة. فعلى سبيل المثال:

SampleClass obj = new SampleClass();
//obj.Paint();  // Compiler error.

IControl c = (IControl)obj;
c.Paint();  // Calls IControl.Paint on SampleClass.

ISurface s = (ISurface)obj;
s.Paint(); // Calls ISurface.Paint on SampleClass.

ويستخدم أيضاً التطبيق الصريح لحل حالات حيث تقوم واجهتين بتعريف أعضاء مختلفين لنفس الاسم كخاصية وأسلوب:

interface ILeft
{
    int P { get;}
}
interface IRight
{
    int P();
}

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

class Middle : ILeft, IRight
{
    public int P() { return 0; }
    int ILeft.P { get { return 0; } }
}

راجع أيضًا:

المرجع

الفئات والبنيات (دليل البرمجة لـ #C)

الواجهات (ارشادات البرمجة C#)

الوراثة (دليل البرمجة لـ #C)

المبادئ

دليل البرمجة لـ #C