Abstract Class คือ Class ชนิดหนึ่งที่มีคุณสมบัติพิเศษ คือ สามารถมี Method
ได้ทั้งแบบมีส่วนการประมวลผล กับแบบ Method
ที่มีเพียงแค่ชื่อเพียงเท่านั่น ยกตัวอย่าง
abstract class Customer
{
public void PrintCustomer()
{
Console.WriteLine(“Customer X”);
}
public abstract void PrintCustomerAddress();
}
class UnitTest : Customer //extends
{
public override void PrintCustomerAddress()
{
Console.WriteLine(“CustomerAddress”);
}
}
namespace ConsoleUnitTest
{
class Program
{
static void Main(string[] args)
{
UnitTest t = new UnitTest ();
t.PrintCustomer();
t.PrintCustomerAddress();
}
}
กรณีศึกษา
สมมติว่ามี class ไว้เก็บข้อมูลพนักงานขายสินค้า พนักงานขับรถ
และผู้บริหาร โดยพนักงานทุกคนในบริษัทจะได้รับโบนัสปีละ 1 ครั้ง
กรณีนี้เราจะเห็นว่าพนักงานทุกประเภทสามารถ GetBonus() ได้ เราจึงควรสร้าง
base class ขึ้นมาใหม่และย้าย method นี้ไปไว้ที่ base class
แต่ปัญหายังไม่จบ เพราะวิธีการคำนวนโบนัสของแต่ละคนแตกต่างกัน
ทำให้เราไม่สามารถ implement GetBonus() ไว้ที่ base class ได้
หรือถ้าเราสร้างเป็น method ที่ไม่มี implementation ไว้ เราอาจจะสร้าง sub
class ตัวใหม่ขึ้นมาและลืม implement method
นี้ทำให้พนักงานประเภทนั้นไม่ได้รับโบนัสตอนสิ้นปี
เพื่อบังคับให้ทุก sub class implement method GetBonus() เราจึงควรกำหนด method GetBonus() ที่ base class ให้เป็น abstract
ref : http://www.narisa.com/forums/index.php?showtopic=32477
ไม่มีความคิดเห็น:
แสดงความคิดเห็น