หากเราสมมติว่ามันไม่เป็นที่พึงปรารถนาสำหรับคลาสฐานที่จะเป็นคลาสอินเตอร์เฟสที่บริสุทธิ์และใช้ 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
? อย่างจริงจัง? หากคุณไม่สามารถปฏิเสธประเภทที่ยังไม่ได้ใช้งานได้ในเวลารวบรวม (คุณสามารถใช้วิธีนามธรรม) อย่างน้อยก็โยนข้อยกเว้น