shovelDefault Constructor

ภูริทัต คมขำ 650710577

Default Constructor ทำหน้าที่เดียวกับ constructor กล่าวคือ ใช้สำหรับกำหนดค่าใน fields ให้กับวัตถุ แต่ Default Constructor แตกต่างออกไป โดยที่ จะไม่รับ parameters ใดๆ ซึ่งจะกำหนดค่าเริ่มต้นให้กับฟิลด์ของวัตถุ

class Person
{
    public string name;
    public int age;
    // Implicit default constructor
}

เห็นได้ว่าคลาส Person ไม่มี constructor ใดๆ เมื่อมีการสร้างวัตถุของ Person ตัว compiler จะกำหนดค่าเริ่มต้นให้ ผลลัพธ์เมื่อสร้างวัตถุ

Person p = new Person();
Console.WriteLine($"Name: {p.name}");     
Console.WriteLine($"Age: {p.age}");
chevron-rightผลลัพธ์hashtag
Name: 
Age: 0

Implicit default constructor

เมื่อไม่มีการประกาศ constructor ใดๆ ในคลาส compiler จะสร้าง default constructor ให้โดยอัตโนมัติดังตัวอย่างก่อนหน้า

Explicit default constructor

เป็นการสร้าง default constructor โดยที่ผู้เขียนกำหนดข้อมูลเริ่มต้นด้วยตัวเอง

chevron-rightผลลัพธ์hashtag

เห็นได้ว่าผู้เขียนได้กำหนดค่าเริ่มต้นให้กับ Name = "_", age = 20 ผลลัพธ์ที่ได้ คือ name จะไม่มีค่า null และ age ไม่มีค่า 0 เหมือน Implicit default constructor แล้ว

ค่าเริ่มต้นที่กำหนด

ค่าเริ่มต้นที่กำหนดให้ขึ้นอยู่กับชนิดข้อมูลของฟิลด์แต่ละตัว

  • Numeric เช่น int, float, double, decimal จะถูกกำหนดค่าเริ่มต้นเป็น 0

  • Boolean จะถูกกำหนดเป็น false

  • Character จะถูกกำหนดเป็นค่า null

  • Reference เช่น string, คลาสต่าง ๆ, อาเรย์ จะถูกกำหนดเป็น null

  • Enum ค่าเริ่มต้นจะเป็น สมาชิกตัวแรก

Type
Default value

reference type

null

numeric type

0 (zero)

floating-point numeric type

0 (zero)

bool

false

char

'\0' (U+0000) null character

enum

สมาชิกตัวแรก

struct

สมาชิกแต่ละตัว จะมีค่า default values

chevron-rightผลลัพธ์hashtag

ข้อสำคัญ

ถ้าผู้เขียนใส่ constructor อย่างน้อยหนึ่งอัน compiler จะไม่สร้าง default constructor ให้เสมอไป

ดังนั้นเมื่อมีการประกาศ constructor ใดๆแล้ว ถ้าต้องการประกาศ default constructor จะต้องประกาศด้วยตัวเองเพิ่มลงไป

เปรียบเทียบกับ C,Java,Python

C

เนื่องจากภาษา C เป็น Procedural programming language จึงไม่มี class หรือ object อย่าง OOP (object-oriented programming) และทำให้มีการทั้ง constructor, default constructor ได้ ซึ่งสามารถทำได้ในภาษาอื่นๆของ C-based นั้นคือ C++, C#

Java

ภาษา Java เป็นทั้งภาษาที่สนับสนุน OOP จึงมี default constructor เช่นเดียวกับ C#

chevron-rightผลลัพธ์hashtag

แต่มีข้อแตกต่างในส่วนค่าเริ่มต้นของ enum ซึ่งใน Java ค่าเริ่มต้น คือ null ส่วนอื่นๆทำงานเช่นเดียวกับ C#

Data Type
Default Value (for fields)

byte

0

short

0

int

0

long

0L

float

0.0f

double

0.0d

char

'\u0000'

String (or any object)

null

boolean

false

Python

Python เป็นภาษาสนับสนุน OOP และ การประกาศตัวแปรไม่จำเป็นต้องระบุชนิดข้อมูล(Dynamic Typing) ซึ่งถ้าไม่ได้มีการกำหนดชนิดข้อมูล ก็จะไม่สามารถกำหนดค่าเริ่มต้นให้ตัวแปรได้ ส่วนใหญ่จะใช้วิธี Explicit default constructor แทน

chevron-rightผลลัพธ์hashtag

ซึ่งแตกต่างที่สามารถกำหนด default constructor ใน parameters ของ constructor ได้เลย

chevron-rightผลลัพธ์hashtag

และ Python สามารถกำหนดชนิดข้อมูลตอนประกาศตัวแปรได้

chevron-rightผลลัพธ์hashtag

ผลลัพธ์ที่ได้ คือ compiler กำหนดค่าเริ่มต้นให้เมื่อมีการประกาศชนิดข้อมูลร่วมด้วย

Python default values

  • Numeric Types

    • จำนวนเต็ม int -> 0

    • จำนวนทศนิยม float -> 0.0

    • จำนวนเชิงซ้อน complex -> 0j

  • Sequence Types

    • สตริง str -> null

    • ลิสต์ list -> []

    • tuple -> ()

  • Mapping Type

    • คู่อันดับ dict -> {}

  • Set Types

    • เซ็ต set -> {}

    • เซ็ตที่ไม่สามารถเปลี่ยนแปลงค่าได้ frozenset -> frozenset()

  • Boolean Type

    • ค่าความจริง bool -> false

  • None Type

    • ไม่ระบุชนิดข้อมูล anyVar -> None

Slide

Default Constructor in C#.pdfarrow-up-right

Default Constructor in C#.pdf

Video Presentation

Reference :

C#

C

Java

Python

Last updated