วันอังคารที่ ๓๑ กรกฎาคม พ.ศ. ๒๕๕๐

Value Types (1) : Built-in Types

Value Type หรือ Primitive Types คือ ชนิดข้อมูลพื้นฐาน ที่มีการเก็บค่า (allocate) ในหน่วยความจำเป็นแบบ stack และสืบทอด (derive) มาจาก System.ValueType ซึ่งมีความเร็วในการทำงานมากกว่า แบบ Reference Type (type ชนิดนี้แหละครับ ที่เมื่อมีอยู่ในภาษา Object-Oriented ใดแล้ว ภาษานั้นจะถูกเรียกว่า Hybrid Object-Oriected เพราะไม่ถือว่าเป็น OO เต็มรูปแบบ แต่ก็มีข้อดี คือทำงานได้เร็วขึ้น ซึ่งสังเกตได้ว่า value types นี้ จะเป็น type ที่ใช้บ่อยๆ เช่น ตัวเลข เป็นต้น ส่วนถ้าเป็นภาษาที่ใช้ความสามารถ OO เต็มรูปแบบ จะเรียกว่า Pure Object-Oriented เช่น ภาษา SmallTalk, Ruby, Eiffel เป็นต้น) value types แบ่งออกเป็น 3 ประเภท คือ

1. Built-in types
2. User-defined types
3. Enumerations (Sealed Value Types)

Built-in types
มี built-in types กว่า 300 ชนิด แต่ในที่นี้ผมจะขอแนะนำเฉพาะที่น่าสนใจ เช่น

ตัวเลขจำนวนเต็ม


SByte (System.SByte/sbyte) -128 ถึง 127
Byte (System.Byte/byte) 0 ถึง 255
ขนาด 1 byte (8 bits)
Short (System.Int16/short) -32,768 ถึง 32,767
UShort (System.UInt16/ushort) 0 ถึง 65,535
ขนาด 2 byte (16 bits)
Integer (System.Int32/int) -2,147,483,648 ถึง 2,147,483,647
UInteger (System.Int32/uint) 0 ถึง 4,294,967,295
ขนาด 4 byte (32 bits)
Long (System.Int64/long) -9,223,372,036,854,775,808 ถึง 9,223,372,036,854,775,807
ULong (System.UInt64/ulong) 0 ถึง 18,446,744,073,709,551,615
ขนาด 8 byte (64 bits)


ตัวเลขทศนิยม

Single (System.Single/float)
-3.402823E38 ถึง -1.401298E-45 และ 1.401298E-45 ถึง 3.402823E38 (ความถูกต้องของทศนิยม 7 หลัก)
ขนาด 4 byte (32 bits)
Double (System.Double/double)
-1.79769313486231E308 ถึง -4.94065645841247E-324 และ 4.94065645841247E-324 ถึง 1.79769313486232E308 (ความถูกต้องของทศนิยม 15-16 หลัก)
ขนาด 8 byte (64 bits)
Decimal (System.Decimal/decimal)
กรณีจำนวนเต็ม +/- 79,228,162,514,264,337,593,543,950,335
และกรณีทศนิยม +/-7.9228162514264337593543950335 (ความถูกต้องของทศนิยม 28 หลัก)
ขนาด 16 byte (128 bits)

อื่นๆ

Char (System.Char/char)
ข้อมูลตัวอักษร 1 ตัว เป็น Unicode
ขนาด 2 bytes (16 bits)
ฺBoolean (System.Boolean/bool)
ข้อมูลทางตรรกะ(logic) มีค่าเป็น True หรือ False
ขนาด 4 bytes (32 bits)
Date (System.DateTime/date) ตั้งแต่ 1/1/0001 12:00:00 AM ถึง 12/31/9999 11:59:59 PM
ข้อมูลวันเวลา
ขนาด 8 bytes (64 bits)
System.IntPtr
ข้อมูล Pointer ที่ชี้ไปยัง address ใน memory
ขนาดขึ้นกับ platfrom ที่ framework อยู่

ทิปเทคนิค :
** เมื่อมีการใช้ชนิดข้อมูลที่เป็นจำนวนเต็ม แนะนำให้ใช้ Integer หรือ UInteger เพราะ CLR ถูกปรับมาให้ทำงานกับตัวเลขจำนวนเต็ม ขนาด 32-bits ได้มีประสิทธิภาพมากกว่าชนิดอื่น
** Value type จะมี method เช่น ToString มาให้ เพราะทุกๆ type ทั้ง value types และ reference types ก็ล้วนแล้วแต่สืบทอดมาจาก System.Object นั้นเอง

แหล่งข้อมูล :
Reference and Value Types by William Ryan
Programming in .NET: The Type System - Addison-Wesley Professional
Primitive, Reference and Value Types by Nadeem Afanah - CodeProject

Related Post