سؤال

دعونا نقول لدي البرمجية التالية:

interface ISomeInterface
{
    void DoSomething();
    void A();
    void B();    
}

public abstract class ASomeAbstractImpl : ISomeInterface
{
    public abstract void A();
    public abstract void B();
    public void DoSomething()
    {
        // code here
    }
}

public class SomeImpl : ASomeAbstractImpl 
{
    public override void A()
    {
        // code
    }

    public override void B()
    {
        // code
    }
}

المشكلة هي أنني أتمنى أن يكون ASomeAbstractImpl.DoSomething() طريقة مختومة (النهائي) لذلك أي فئة أخرى يمكن تنفيذها.كما رمز الآن SomeImpl يمكن أن يكون طريقة تسمى DoSomething() وهذا يمكن أن يسمى (ومن لم تجاوز الأسلوب مع نفس اسم من فئة مجردة, لأن ذلك ليس علامة الظاهري) ، ولكن أود أن قطع إمكانية تنفيذ مثل هذا الأسلوب في SomeImpl فئة.

هل هذا ممكن ؟

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

المحلول

ومختومة طرق في C # افتراضيا. هناك، مع ذلك، على لا شيء يمكنك القيام به لمنع الاختباء طريقة (فضح طريقة بنفس الاسم في فئة مشتقة، عادة مع new).

وأو، لهذه المسألة، واجهة معاودة تطبيق النظام:

static void Main()
{
    ISomeInterface si = new EvilClass();
    si.DoSomething(); // mwahahah
}

public class EvilClass : ASomeAbstractImpl, ISomeInterface
{
    public override void A() {}
    public override void B() { }
    void ISomeInterface.DoSomething()
    {
        Console.WriteLine("mwahahah");            
    }
}

نصائح أخرى

ويتم اغلاق جميع الطرق افتراضيا، ولكن ليس هناك وسيلة لمنع إخفاء الأعضاء.

ووC # المترجم سوف يصدر تحذير المترجم كلما قمت بإخفاء عضوا، ولكن بغض النظر عن ذلك، لا يمكنك منع ذلك.

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

http://msdn.microsoft.com/en-us/library/aa645769(مقابل.71).aspx

وإذا الطبقة SomeImpl يحتوي على طريقة DoSemthing، وهذا يعني أنه يخفي نسخة أصلية واحدة لا تتجاوز.

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

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