2009-04-28 7 views
38

सी # में ओवरराइड विधि चिह्नित करने के लिए, यह अंतिम के रूप में एक ओवरराइड आभासी विधि चिह्नित करने के लिए तो इसको लागू करने ओवरराइड नहीं कर सकते संभव है? मैं यह कैसे करूंगा?यह संभव के रूप में अंतिम

एक उदाहरण यह आसान समझने के लिए कर सकते हैं:

class A 
{ 
    abstract void DoAction(); 
} 
class B : A 
{ 
    override void DoAction() 
    { 
     // Implements action in a way that it doesn't make 
     // sense for children to override, e.g. by setting private state 
     // later operations depend on 
    } 
} 
class C: B 
{ 
    // This would be a bug 
    override void DoAction() { } 
} 

वहाँ आदेश DoAction अधिभावी से अन्य बच्चों सी को रोकने के लिए बी को संशोधित करने का कोई तरीका है, या तो संकलन समय या रनटाइम पर?

उत्तर

62

हाँ, "सील" के साथ:

class A 
{ 
    abstract void DoAction(); 
} 
class B : A 
{ 
    sealed override void DoAction() 
    { 
     // Implements action in a way that it doesn't make 
     // sense for children to override, e.g. by setting private state 
     // later operations depend on 
    } 
} 
class C: B 
{ 
    override void DoAction() { } // will not compile 
} 
8

आप sealed के रूप में विधि चिह्नित कर सकते हैं।

http://msdn.microsoft.com/en-us/library/aa645769(VS.71).aspx

class A 
{ 
    public virtual void F() { } 
} 
class B : A 
{ 
    public sealed override void F() { } 
} 
class C : B 
{ 
    public override void F() { } // Compilation error - 'C.F()': cannot override 
           // inherited member 'B.F()' because it is sealed 
} 
+0

के रूप में सील क्यों तुम वर्ग को चिह्नित करना होगा आप इस तथ्य – annakata

+0

में बंद व्यक्ति तरीकों कर सकते हैं? साथ ही आप विधि स्तर पर इस संशोधक निर्दिष्ट कर सकते हैं ... –

+0

दिलचस्प मैं जाना जाता कभी नहीं किया है आप तरीकों को सील कर सकता है लेकिन मैं करने के लिए एक कारण नहीं था कभी नहीं किया है। –

5

व्यक्तिगत तरीकों, के रूप में सील जो मोटे तौर पर जावा में अंतिम के रूप में एक विधि अंकन के बराबर है चिह्नित किया जा सकता। तो अपने उदाहरण में आप होगा:

class B : A 
{ 
    override sealed void DoAction() 
    { 
    // implementation 
    } 
} 
संबंधित मुद्दे