मुझे लगता है कि होगा क्या तुम सच में नहीं है सभी व्युत्पन्न वर्ग की जरूरत सार विधि लागू करने के लिए है, लेकिन आप की तरह अपने डिजाइन में एक कोड गंध का एक सा है यह निश्चित रूप से लगता है।
यदि आपके पास Concrete.Clone() विधि में कोई कार्यक्षमता नहीं है, तो आप अपना 'कंक्रीट' वर्ग सार भी बना सकते हैं (बस नाम बदलना सुनिश्चित करें ;-)। क्लोन() विधि का कोई संदर्भ छोड़ दें।
abstract class Base { protected abstract void Clone(); }
abstract class Concrete : Base { }
class Custom : Concrete { protected override void Clone() { /* do something */ } }
आप Concrete.Clone() विधि में कुछ बुनियादी कार्यक्षमता है, लेकिन एक उच्च स्तर से विस्तृत जानकारी की जरूरत है, तो यह बाहर तोड़ अपने आप सार विधि या संपत्ति इस आपूर्ति करने के लिए एक उच्च स्तर कार्यान्वयन के लिए मजबूर कर में जानकारी। concreate वर्ग या उपयोग आधार वर्ग में
abstract class Base { protected abstract void Clone(); }
abstract class ConcreteForDatabases : Base
{
protected abstract string CopyInsertStatemement {get;}
protected override void Clone()
{
// setup db connection & command objects
string sql = CopyInsertStatemement;
// process the statement
// clean up db objects
}
}
class CustomBusinessThingy : ConcreteForDatabases
{
protected override string CopyInsertStatemement {get{return "insert myTable(...) select ... from myTable where ...";}}
}
स्रोत
2009-07-16 14:42:38
जब तक विरासत पेड़ में कुछ ठोस वर्ग सार विधि लागू किया गया है, यही कारण है कि आप एक बच्चे अगर चाहेंगे का उपयोग करता है उस ठोस वर्ग के माता-पिता के कार्यान्वयन पर निर्भर करता है? –
मुझे पार्टी के लिए देर हो चुकी है लेकिन मुझे एक ही समस्या है।मुझे एक 'निजी अमूर्त' क्वालीफायर होना पसंद है जो प्रत्येक व्युत्पन्न वर्ग को कार्य को लागू करने के लिए मजबूर करता है लेकिन क्लैस के कोड को मूल रूप से माता-पिता वर्ग के कार्यान्वयन पर वापस आने से रोकता है। 'क्लोन()' एक अच्छा उदाहरण है। मेरा मामला 'ToString() 'की तरह है। प्रति वर्ग कुछ सामान्य लेकिन विशिष्ट। –
असल में यह अक्सर होता है (या मुझे कुछ याद आ रहा है)। –