अगर हम यह मान लें कि बेस क्लास के लिए शुद्ध इंटरफ़ेस क्लास होना वांछनीय नहीं है, और नीचे से 2 उदाहरणों का उपयोग करना, जो कि एक बेहतर तरीका है, अमूर्त या वर्चुअल मेथड क्लास परिभाषा का उपयोग करना है?
"अमूर्त" संस्करण का लाभ यह है कि यह संभवतः साफ दिखता है और व्युत्पन्न वर्ग को एक उम्मीद के मुताबिक सार्थक कार्यान्वयन के लिए मजबूर करता है।
"वर्चुअल" संस्करण का लाभ यह है कि इसे आसानी से अन्य मॉड्यूल द्वारा खींचा जा सकता है और परीक्षण के लिए उपयोग किया जाता है, जैसे कि अंतर्निहित संस्करण की तरह अंतर्निहित ढांचे का एक गुच्छा जोड़ने के बिना।
सार संस्करण:
public abstract class AbstractVersion
{
public abstract ReturnType Method1();
public abstract ReturnType Method2();
.
.
public abstract ReturnType MethodN();
//////////////////////////////////////////////
// Other class implementation stuff is here
//////////////////////////////////////////////
}
वर्चुअल संस्करण:
public class VirtualVersion
{
public virtual ReturnType Method1()
{
return ReturnType.NotImplemented;
}
public virtual ReturnType Method2()
{
return ReturnType.NotImplemented;
}
.
.
public virtual ReturnType MethodN()
{
return ReturnType.NotImplemented;
}
//////////////////////////////////////////////
// Other class implementation stuff is here
//////////////////////////////////////////////
}
return ReturnType.NotImplemented
? गंभीरता से? यदि आप संकलन समय पर अनइम्प्लीमेंट किए गए प्रकार को अस्वीकार नहीं कर सकते (आप कर सकते हैं, अमूर्त विधियों का उपयोग करें) कम से कम एक अपवाद फेंकें ।