لماذا يجب أن نعلن عن طرق الواجهة على أنها عامة?[مكررة]

StackOverflow https://stackoverflow.com//questions/9614708

  •  09-12-2019
  •  | 
  •  

سؤال

عندما أقوم بتنفيذ interface الطريقة ، وأنا اضطر لجعله public الطريقة.

قد يكون لدينا حالات نريد فيها استخدام إما default (كما هو الحال في حالة الوصول داخل نفس الحزمة) أو protected.

يمكن لأي شخص يرجى توضيح السبب وراء هذا القيد?

هل كانت مفيدة؟

المحلول

تهدف واجهات

إلى تحديد العام API من النوع - وفقط ذلك، وليس تنفيذها.لذلك أي طريقة (أو عضو ثابت) تحددها في واجهة هي عن طريق تعريف public.

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

نصائح أخرى

ربما هذا سوف تقدم بعض الإجابات.

على حد علمي ، يمكنك استخدام interfaces للسماح للناس من خارج التعليمات البرمجية الخاصة بك إلى تفاعل مع التعليمات البرمجية الخاصة بك.للقيام بذلك ، تحتاج إلى تحديد الأساليب الخاصة بك public.

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

واجهة هي عقد أن الفئة التي تنفذ أنه سيكون لها الأساليب في الواجهة.يتم استخدام الواجهة لإظهار بقية البرنامج أن هذه الفئة لديها الأساليب وأنه يمكن أن يسمى

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

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

interface IStorable
{
     void Read( );
     void Write(object obj);
}

لاحظ أن IStorable إعلانات الطريقة ل Read( ) و Write( ) لا تقم بتضمين معدّلات الوصول (public, protected ..).في الواقع، يؤدي توفير معدّل الوصول إلى حدوث خطأ في الترجمة.

class Document : IStorable
{
     public void Read( )
     {
         //
     }
     public void Write(object obj)
     {
         //
     }
}

مجرد التفكير في واجهات كما انكماش ليتم تنفيذها كما public

  1. إذا علمنا طريقة واجهة كخاصة لن يكون فئة المنفذات انظر الطريقة وغير قادر على تجاوزه.

  2. إذا علمنا طريقة واجهة كمحمية فئة المنفذ لن ترى الطريقة إلا إذا كان في نفس الحزمة مثل واجهة.

  3. إذا وضع علينا بطريقة واجهة دون أي تعديل وصول
    المنفذات لن ترى الطريقة ما لم تكن في نفسها
    حزمة كواجهة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top