Input/output with files

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับการเขียนโปรแกรมในการทำงานกับไฟล์ เพื่ออ่านข้อมูลจากไฟล์และเขียนข้อมูลลงไปบนไฟล์ในภาษา C# โปรแกรมคอมพิวเตอร์ส่วนมากทำงานกับไฟล์ ซึ่งไฟล์จะแบ่งออกเป็น 2 ประเภท คือ text file และ binary ไฟล์ ในบางครั้งการเขียนโปรแกรมนั้นเราจำเป็นต้องเก็บข้อมูลในรูปของไฟล์ เช่น การเก็บข้อมูลการตั้งค่า หรือบันทึก log เพื่อนำมาใช้งานในการเปิดโปรแกรมครั้งใหม่ ในบทนี้ เราจะพูดถึงการเขียนโปรแกรมเพื่อทำงานกับ Text file ในภาษา C# ซึ่งเป็นรูปแบบการเก็บไฟล์ที่สะดวกและง่ายในการใช้งาน และสามารถเข้าถึงได้โดยโปรแกรมทุกประเภท การอ่านค่าจาก text file ต่อไปเป็นตัวอย่างของโปรแกรมในการอ่านไฟล์จากคอมพิวเตอร์ โดยโปรแกรมจะอ่านไฟล์จากพาทที่กำหนด และแสดงข้อความในไฟล์ ดังโค้ดข้างล่าง using System; using System.IO; class ReadFromFile { static void Main(string[] args) { string line; StreamReader file = null; try { […]

Read More Input/output with files

Threads

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับ thread และวิธีการใช้งาน thread ในภาษา C# Thread คืออะไร Thread เป็นการทำงานของโปรแกรมที่สามารถทำงานแบบ concurrence (แบบขนาน) โดยแต่ละ thread จะทำงานไปพร้อมกัน โดยปกติการทำงานของโปรแกรมนั้นจะทำงานทีละบรรทัด และต้องรอให้บรรทัดก่อนหน้าเสร็จก่อน โปรแกรมจึงจะประมวลผลในบรรทัดต่อไป การใช้ thread นั้นสามารถทำให้โปรแกรมทำงานพร้อมกันได้ในแต่ละ thread ที่ถูกสร้างขึ้นภายในโปรแกรม ตัวอย่างการใช้งาน มักจะพบในโปรแกรมที่สามารถแบ่งงานกันทำได้ หรือโปรแกรม server และ client โดยที่ server จะสร้าง thread ขึ้นมาเพื่อจัดการกับแต่ละ client ที่เชื่อมต่อเข้ามา และใช้กับการพัฒนาเกม เป็นต้น การสร้าง Thread ในภาษา C# มีไลบรารี่ของ thread ที่เราสามารถใช้งาน มาดูตัวอย่างการสร้าง thread using System; using System.Threading; class Threads { […]

Read More Threads

Preprocessor directives

Preprocessor directives เป็นคำสั่งของโปรแกรมที่ประมวลผลในตอนที่คอมไพเลอร์เริ่มต้นทำงาน ซึ่งมันทำงานโดย preprocessor และก่อนที่โปรแกรมจะสร้าง executable file ที่ใช้ในการรันโปรแกรม preprocessor directives นั้นเริ่มต้นด้วยเครื่องหมาย hash (#) และมันใช้บรรทัดใหม่ในการสิ้นสุดคำสั่ง นี่เป็นตารางของ Preprocessor directives ที่มีในภาษา C# Directives Descriptions #if ตรวจสอบถ้าหาก symbol ได้ถูกกำหนด #else คำสั่งถ้าหากเงื่อนไขจาก #if ไม่ได้ถูกกำหนด #elif ตรวจสอบถ้าหากมีการกำหนด symbol แบบหลายตัวเลือก #endif ใช้ควบคู่กับ #if เพื่อปิดบล็อคคำสั่ง #define ใช้เพื่อกำหนด symbol ในโปรแกรม #undef ใช้เพื่อยกเลิก symbol ในโปรแกรม #warning ใช้เพื่อให้คอมไพเลอร์สร้างการแจ้งเตือน #error ใช้เพื่อให้คอมไพเลอร์สร้างข้อผิดพลาด #line แก้ไขหมายเลขบรรทัดของคอมไพเลอร์ #region ใช้ในการกำหนดขอบเขตหรือส่วนของโค้ด #endregion […]

Read More Preprocessor directives

Generic Collections

ในบทนี้ คุณจะได้รู้จักกับ Collections ในภาษา C# และการใช้งาน Collections ประเภทต่างๆ ที่มีความจำเป็นในสภานะการณ์ที่แตกต่างกัน Collections (คอลเล็กชัน) หรือ Generic Collections นั้นเป็นไลบรารี่ของภาษา C# ที่มีอยู่แล้ว ซึ่งเราสามารถที่จะนำมาใช้งานได้เลย โดยมันจะอยู่ภายใน Namespace System.Collections.Generic อย่างไรก็ตาม เราจะพูดถึงเฉพาะ Collection ที่มีการใช้บ่อยๆ ที่สุดเท่านั้น โดยรูปแบบการใช้งาน Generic Collections จะเป็นดังนี้ Type<Data_type> collection_name = new Type<Data_type>(); การใช้ List List (ลิสต์) นั้นเป็นโครงสร้างข้อมูลที่ใช้ในการเก็บข้อมูลแบบเป็นลำดับ โดยมันมาแทน ArrayList ที่ถูกเลิกใช้ไปตั้งแต่ .Net Framework 2.0 สิ่งแตกต่างของมันกับอาเรย์คือ มันสามารถเก็บข้อมูลได้แบบไดนามิกส์ หรือเพิ่มขึ้นเรื่อยๆ โดยที่เราไม่ต้องบอกขนาดล่วงหน้า และเช่นเดียวกัน Collections ทกตัวนั้นเป็นไดนามิกส์ทั้งหมด ต่อไปมาดูตัวอย่างการใช้ List […]

Read More Generic Collections

Overloading Operators

ในบทนี้ คุณจะได้รู้จักและการใช้งานกับ Overloading Operators ในภาษา C# ซึ่งเป็นการเปลี่ยนการทำงานของตัวดำเนินการทางคณิตศาสตร์พื้นฐานให้สามารถทำงานกับออบเจ็คได้เหมือนกับการใช้งานกับประเภทข้อมูลพื้นฐาน (Primitive data type) ในภาษา C# Overloading Operators คืออะไร Overloading Operators คือการเปลี่ยนแปลงวิธีการทำงานของตัวดำเนินการทางคณิตศาสตร์ให้ทำงานตามที่ต้องการ ยกตัวอย่างเช่น ในการบวกเลขสองตัวนั้น เป็นการนำค่าของพวกมันมารวมกัน ซึ่งมันใช้ได้กับตัวเลข เช่น 2 + 3 = 5 แต่สำหรับข้อมูลแบบอื่นเช่น ต้องการเอาน้ำสองแก้วมารวมกัน ข้อมูลที่มีอาจจะเป็นรัศมีของแก้ว หรืออื่นๆ ถ้าหากแก้วนั้นเป็นเหมือนออบเจ็ค มันจึงทำให้การทำงานเมื่อนำมารวมกันนั้น ไม่ได้เป้นเหมือนตัวเลข แต่เราใช้เครื่องหมาย + เช่นเดิม ดังนั้น ในบทนี้คุณจะได้เรียนรู้เกี่ยวกับ Operator overloading กับออบเจ็ค ซึ่งเป็นความสามารถหนึ่งในภาษา C# ที่จะทำให้การทำงานกับออบเจ็คนั้นง่ายและรวดเร็วมากขึ้น นี่เป็นรูปแบบของการทำ Overloading Operators ในภาษา C# class MyClass { public […]

Read More Overloading Operators

Enums

Enum คืออะไร Enum เป็นประเภทข้อมูลที่เป็นชุดของตัวเลขจำนวนเต็ม มันใช้กำหนดกลุ่มของค่าคงที่ที่ทำให้มีความหมายและเข้าใจได้ง่ายขึ้นในการเขียนโปรแกรม โดยค่าที่ใช้ในการประกาศ enum นั้นจะเป็น String literal ใดๆ โดยค่าเหล่านี้ถือว่าเป็นค่าคงที่ของจำนวนเต็ม รูปแบบการใช้ enum ในภาษา C# เป็นดังนี้: enum Name{ Value1, Value2, … }; โดยคำสั่ง enum นั้นจะใช้สำหรับการสร้าง enum และ Name เป็นชื่อของ enum ที่สร้างขึ้น และภายในวงเล็บ {} นั้นจะเป็นชุดค่าของ enum โดยมาสามารถเป็น literal ใดๆ ที่ C# อนุญาติให้ทำได้ ค่าของ enum สามารถมีได้ตั้งแต่หนึ่งหรือหลายค่า โดยแต่ละค่านั้นจะคั่นด้วยเครื่องหมาย Commas ต่อไปมาดูตัวอย่างการสร้างและใช้งานของ enum ในภาษา C# ซึ่งเราจะเขียนโปรแกรมโดยการใช้ enum เก็บค่าคงที่วันในสัปดาห์ using […]

Read More Enums

Exception

ในบทนี้ คุณจะได้เรียนและทำความรู้จักกับ Exception ในภาษา C# รวมถึงการใช้งาน Exception จากไลบรารี่ที่ภาษา C# มีให้ และการจัดการและสร้าง Exception แบบกำหนดเอง Exception คืออะไร Exception คือข้อผิดพลาดที่เกิดขึ้นในขณะที่โปรแกรมกำลังทำงานในเงื่อนไขที่ไม่เหมาะสม แล้วโปรแกรมไม่รู้วิธีการจัดการกับข้อผิดพลาดนี้ ทำให้โปรแกรมแสดงข้อผิดพลาดให้เราทราบออกทาง Console และโปรแกรมหยุดทำงานหรือ Crash ในบางครั้งโปรแกรมของเราทำงานขึ้นกับสภาวะแวดล้อมอื่น เช่น การรับค่ามาจากผู้ใช้ หรือการที่ไม่สามารถเชื่อมต่ออินเตอร์เน็ตได้ ทำให้เกิด Exception ขึ้น เราต้องจัดการเพื่อให้โปรแกรมสามารถที่จะทำงานต่อไปได้ ในภาษา C# คุณสามารถใช้ Exception จากไลบรารี่ทีมีอยู่หรือสร้างขึ้นมาเองได้ โดยมีรูปแบบการใช้งานดังนี้ try { // Statement to execute } catch (ExceptionType1 ex1) { // Handing exception 1 } catch (ExceptionType2 ex2) […]

Read More Exception

Events

Event คือเหตุการณ์ที่เกิดขึ้นในขณะที่โปรแกรมทำงาน เพื่อทำบางอย่างในโปรแกรม เช่น การกดปุ่ม หรือการทำงานของนาฬิกา การ interrupt จากอินพุตเอาท์พุตภายนอก ในการจัดการกับ event ที่เกิดขึ้นในภาษา C# เราต้องสร้างเมธอดสำหรับการ Callback ซึ่งเป็นเมธอดที่จะทำงานเมื่อเกิด event ขึ้น โดยทั่วไปเมธอดนี้จะมีสองพารามิเตอร์คือ แหล่งกำเนิดของ event และอากิวเมนต์ของ event ในการสร้างเมธอดสำหรับ Callback และเรียกใช้ event นั้นจะเกี่ยวข้องกับ delegate โดยตรง ดังนั้นในบทนี้คุณต้องเข้าใจเกี่ยวกับ delegate ให้ดีก่อน การสร้าง Event ต่อไปมาดูตัวอย่างการสร้าง event อย่างง่ายในภาษา C# โดยโปรแกรมของเราจะเป็น event เกี่ยวกับการบอกสภาพอากาศ โดยเราจะทำการ trigger event (การทำให้เกิด event ขึ้น) using System; public delegate void OnBadWeatherHandler(object sender, […]

Read More Events

Delegates

ในบทนี้ เราจะพูดเกี่ยวกับ Delegates และวิธีการใช้งานกับเมธอดในภาษา C# Delegates คืออะไร Delegates เป็นตัวแปรประเภท reference type ที่ถูกพัฒนาขึ้นมาสนับสนุนการเขียนโปรแกรมในภาษา C# มันใช้สำหรับในการอ้างถึงข้อมูลอื่น แทนที่จะอ้างถึงออบเจ็ค มันอ้างถึงเมธอดแทน หรือกล่าวอีกนัยหนึ่ง delegates คือพอยน์เตอร์ของเมธอดนั่นเอง การใช้ delegates นั้นช่วยอำนวนความสะดวกหลายอย่าง เช่น การเลือกเมธอดที่จะทำงานใน run time การนำกลับมาใช้ใหม่ของโค้ด นอกจากนี้ delegates ยังทำให้สามารถส่งเมธอดเป็นพารามิเตอร์ได้ อย่างไรก็ตามปราศจาก delegates เราก็ยังสามารถเรียกใช้เมธอดแบบปกติได้ การใช้ delegates ต่อไปเราจะมีตัวอย่างสำหรับการประกาศและใช้งาน delegates ในภาษา C# using System; class DelegatesExample { delegate void MyDelegates(); static void Main(string[] args) { MyDelegates de = […]

Read More Delegates

Structs

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับโครงสร้างข้อมูลในภาษา C# โครงสร้างข้อมูล คืออะไร โครงสร้างข้อมูล (Struct) เป็นตัวแปรที่ใช้สำหรับเก็บข้อมูลที่มีความเกี่ยวข้องกันในรูปแบบของออบเจ็ค Struct สามารถมีสมาชิกที่เป็น Primitive datatype Reference type และเมธอดได้ โครงสร้างข้อมูลนั้นคล้ายคลึงกับคลาส แต่ว่ามันจะม่สามารถสืบทอดได้ เรามักจะใช้ Struct สำหรับเก็บกลุ่มของข้อมูลที่ไม่มาก ยกตัวอย่าง เช่น เก็บตำแหน่งของจุดในระนาบ เก็บข้อมูลของหนังสือ เป็นต้น นี่เป็นรูปแบบของการประกาศโครงสร้างข้อมูลในภาษา C# struct Name { // struct members } ในการประกาศโครงสร้างข้อมูล นั้นจะใช้คำสั่ง struct และ Name คือชื่อของโครงสร้างข้อมูลที่ประกาศขึ้น สมาชิกของโครงสร้างข้อมูลนั้นจะมีสองแบบเช่นเดียวกันกับคลาสคือตัวแปรและเมธอด ตัวแปรสามารถเป็นได้ทั้งตัวแปรแบบ Value และ Reference มาดูตัวอย่างในกรณีที่เราจะใช้โครงสร้างข้อมูล การสร้างและใช้งาน struct ยกตัวอย่างเช่น เราต้องการเก็บข้อมูลของเมื่อง โดยเมื่อแต่ละเมืองก็จะมีข้อมูลที่แยกย่อยลงไปอีก เช่น ชื่อ ประเทศ และจำนวนประชากร […]

Read More Structs