C# Coding OOP บทความ

C# Abstract class คืออะไร

C# Abstract Class – คือการประกาศว่า class เป็นต้นแบบให้ class ลูกสืบทอดโดยกำหนดความสามาคถตั้งต้นให้ class ลูกเอาไปกำหนดความสามารถต่อ โดยที่ห้าม instantiate ที่ abstract class แต่ให้ instantiate ที่ class ที่สืบต่อไปแทน

ดูภาพรวมกันก่อน

Abstract class เป็นการประกาศ Class โดยที่เราจะใส่ Keyword abstract ไว้ในตอนที่ประกาศ Class

public abstract class Car
{
    // Class members here.
}

นอกจากใส่ keyword คำว่า abstract ไว้ที่ class เรายังสามารถใส่ไว้ที่หน้า method ได้ด้วย และไม่จำเป็นต้องใส่ { } ต่อท้าย( ในกรณีที่ประกาศ method ไว้เฉยๆ โดยไม่ได้มี code การทำงาน)

public abstract class Car
{
    public abstract void StartEngine();
}

ซึ่งถ้าเราใส่ Abstract keyword ไว้ใน method ที่มี code ใน body แล้ว compiler จะแจ้ง error ตามภาพข้างล่างครับ

ฟ้อง error ถ้าใส่ keyword abstract ใน class ที่มี body

ดังนั้นถ้าเราต้องการให้ abstract class มี method ที่มี code การทำงาน เราก็เขียน method โดยที่ไม่มี abstract keyword ได้เลย

	public abstract class Car
	{
		public  void StartEngine()
		{
			Debug.Write("start engine");
		}
	}

ทำไมต้องใช้ Abstract Class

คุณสมบัติของ abstract class คือมันห้ามไม่ให้มีการสร้าง object หรือ instance จาก abstract class ซึ่งจะมีการฟ้อง error ในตอนที่มีการพิมพ์ code เลย

ฟ้อง error ถ้าพยายามจะ instantiate abstract class

ดังนั้นเหตุผลที่เราจะใช้ abstract class ก็คือ

1.ห้าม instantiate ที่ abstract class ป้องกันเอาไปใช้ผิด (ทั้งตัวเราเองหรือทีมของเรา)
2. ต้องการกำหนดความสามารถพื้นฐานไว้ แล้วให้ลูกสืบต่อไป อาจจะมีโค้ดการทำงานไว้เลย หรือสร้างไว้เฉยๆ แล้วให้ลูกไปกำหนดการทำงานเอาเองก็ได้

ตัวอย่างการใช้งาน

// ห้าม instantiate ที่ car แต่ให้สืบต่อไปใช้งาน
public abstract class Car  
	{
		// กำหนดให้รถทุกคันสตาร์ทเครื่องได้
		public  void StartEngine()
		{
			Debug.Write("start engine");
		}
	}

	public class Toyota : Car
    {

    }

	public class Honda : Car
    {

    }

	public class ShowRoom
    {
		public void TestDrive()
        {

			Toyota toyota = new Toyota();
			toyota.StartEngine(); 

			Honda honda = new Honda();
			honda.StartEngine();
        }
		
    }

c# Abstract class ส่งท้าย

เราสามารถนำประโยชน์มาใช้เพื่อ

– กำหนด/สร้างความสามารถต่างๆให้ class ลูกนำไปใช้ (สร้างมาตรฐานและลดการเขียน code ซ้ำๆ)

– ห้าม instantiate ที่ abstract class (ป้องกันการใช้ผิดโดยการให้ programmer ที่จะใช้ class ไปกำหนดการทำงานและสร้าง instance ใน class ลูกแทน)

Type in C# – ว่าด้วยเรื่องชนิดของข้อมูล

Interface – OOP

อ้างอิง

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/abstract-and-sealed-classes-and-class-members

https://en.wikipedia.org/wiki/Abstract_type

Level Management in Unity

You may also like