2010-05-15 14 views
8

मेरे पास कुछ प्लग-शैली सामग्री के लिए बेस क्लास है, और कुछ विधियां हैं जिन्हें पूरी तरह कार्यान्वित करने की आवश्यकता है।आभासी तरीकों में NotImplemented अपवाद फेंकना ठीक है?

मैं वर्तमान में आभासी के रूप में आधार वर्ग में उन लोगों की घोषणा, उदाहरण के

public virtual void Save 
{ 
    throw new NotImplementedException(); 
} 

और descendand में के लिए मैं एक

public override void Save() 
{ 
    //do stuff 
} 

यह एक NotImplementedException वहाँ फेंकने के लिए एक अच्छा अभ्यास है है? अवरोही कक्षाएं उदाहरण के लिए विभिन्न फ़ाइल स्वरूपों को संभालने के लिए मॉड्यूल हो सकती हैं। धन्यवाद

उत्तर

13

आम तौर पर मैं उम्मीद करता हूं कि आपकी बेस क्लास अमूर्त होगी और विरासत वर्गों के कार्यान्वयन को आसानी से रोक देगा।

public abstract class MyBase 
{ 
    public abstract void Save(); 
    ... 
} 

public class MyChild : MyBase 
{ 
    public override void Save() 
    { 
     ... save ... 
    } 

    ... 
} 
8

अमूर्त ऐसा लगता है कि आप वास्तव में क्या कर रहे हैं।

8

क्या यह एक सार विधि के रूप में घोषित करना बेहतर नहीं होगा?

इस तरह सभी कार्यान्वयन प्रकारों को भी इस विधि को लागू करना होगा।

10

कोई अच्छा विचार नहीं है।

आमतौर पर, अधिभावी विधियों के माध्यम से

base.Save() 

आधार स्तरीय विधि कहेंगे और है कि हर बार उल्टी होगा।

तो आम तौर पर, बुरा विचार। आपके मामले में, ऐसा लगता है कि इसे अमूर्त बनाना बेहतर विकल्प होगा।

संबंधित मुद्दे