क्योंकि यदि डिफ़ॉल्ट व्यवहार कुछ भी नहीं करना है, लेकिन कक्षाएं प्राप्त हो सकती हैं कुछ करना चाहते हैं। यह एक पूरी तरह से वैध संरचना है।
यह आपके बेस कोड को कॉल करने की अनुमति देता है। बेस क्लास पर "पहले XXX" और "आफ्टर एक्सएक्स" कोड होने पर आपको समान डिज़ाइन दिखाई देते हैं, यह कोड खाली है, लेकिन विधि को संकलित करने के लिए वहां होना आवश्यक है। व्युत्पन्न कक्षाओं में, यह कोड वैकल्पिक है, लेकिन इसे ओवरराइड करने के लिए वर्चुअल होने की आवश्यकता है।
तथ्य यह है कि यह एक अमूर्त वर्ग में है, इसे अपने व्यवहार को भ्रमित नहीं करना चाहिए।
एक उदाहरण:
abstract class Base
{
public void ProcessMessages(IMessage[] messages)
{
PreProcess(messages);
// Process.
PostProcess(messages);
}
public virtual void PreProcess(IMessage[] messages)
{
// Base class does nothing.
}
public virtual void PostProcess(IMessage[] messages)
{
// Base class does nothing.
}
}
class Derived : Base
{
public override void PostProcess(IMessage[] messages)
{
// Do something, log or whatever.
}
// Don't want to bother with pre-process.
}
तो इन तरीकों (पूर्व, पोस्ट) सार थे, तो सभी व्युत्पन्न वर्ग होगा जरूरत उन्हें (संभावना के रूप में खाली विधि) लागू करने के लिए - कोड कूड़े का उपयोग कर हटाया जा सकता है आधार पर खाली आभासी तरीकों।
स्रोत
2011-04-04 08:35:21
विषाणु। हाँ :) – Heliac