C# Tutorial ตอนแรก

posted on 04 Jun 2005 04:58 by tidno1  in csharp-and-dotnet

สำหรับการจะเขียน C# นั้นเครื่องที่ใช้จำเป็นจะต้องลง .NET Framework ไว้ด้วย เนื่องจากโปรแกรมภาษา C# นั้นต้องรันอยู่บน .NET

เริ่มตอนแรกก็คงจะต้องเริ่มกันจาก editor ที่ใช้เขียนกันก่อน โดยเราสามารถทำได้สองวิธีคือ

  1. ใช้ editor ธรรมดาอย่างเช่น notepad หรือว่า editplus แล้วเซฟไฟล์เป็นนามสกุล .cs โดยผู้ที่ใช้วิธีนี้ จะต้องลง .NET Framework SDK ด้วย และเมื่อลงแล้วให้ทำการ set path ไปที่ %systemroot%Microsoft.NET\Framework\v1.1.4322;
  2. วิธีนี้ง่ายกว่า คือการใช้ IDE อย่างเช่น Visual Studio .NET 2003 หรือตัวที่ฟรีอย่าง SharpDevelop(version ล่าสุดขณะเขียนคือ 1.1.0.1964)
    โดยตัวอย่างใน tutorial ทั้งหมดนี้จะถูกเขียนใน SharpDevelop ดังนั้น เราจะมาสอนวิธีการใช้งาน SharpDevelop กันก่อน

#Develop Install

หลังจากที่ดาวน์โหลดมาเรียบร้อยแล้ว ให้เรา double click ไฟล์ setup กันได้เลย โดยขั้นตอนการลง ก็ไม่มีอะไรยุ่งยาก หวังว่าคงทำกันเป็น



ก็ให้เลือก Create new code completion database เลยนะครับ จากนั้นก็คลิก Next >

แล้วก็ให้เลือก location ที่จะไว้เก็บไฟล์ โดยผมจะเลือกไว้ที่ Application Directory นะครับ เพื่อความเป็นระเบียบ

แล้วก็อย่าลืมกด Start database creationนะครับ หลายคนที่ไม่มี auto complete ขึ้นเพราะว่าลืมกด ปุ่มนี้ แล้วก็บอกว่าโปรแกรมมันค้างแล้วก็ cancel ไป

หลังจากนั้น #Develop จะ restart ตัวเอง เมื่อโปรแกรมถูกเปิดขึ้นมาใหม่แล้ว ให้ไปที่ Tools > Options แล้วไปที่ SharpDevelop options > Projects and Combines และกำหนด Default combine location ซึ่งจะเป็น directory ไว้เก็บ code และ executable file

เริ่มเขียนโปรแกรมแรก

ไปที่ File > New > Combine หรือกด Ctrl + Shift + N แล้วเลือกภาษา C# และกำหนด template เป็น Console Application

โดย #develop จะทำการเติม code ประมาณนี้ให้เรา

using System;

namespace FirstConsoleApplication {
class MainClass {
public static void Main(string[] args) {
Console.WriteLine("Hello World!");
}
}
}

จะอธิบายแต่ละส่วนให้ฟัง คร่าว ๆ ดังนี้

ในส่วนของ using นั้นจะคล้ายกับการ import ในภาษา Java คือ มีไว้สำหรับการรวม namespace ที่จำเป็นต้องใช้ โดยหากบรรทัดนี่เราไม่เขียน เราจะต้องเขียนบรรทัด

Console.WriteLine("Hello World!");
เป็น
System.Console.WriteLine("Hello World!");

namespace,class ไว้อธิบายทีหลัง โดยจำไว้ว่าโปรแกรมของเราจำเป็นจะต้องมีอย่างน้อย 1 class เสมอ

ในภาษา C# นั้น ส่วนหลักของโปรแกรม จะต้องอยู่ในฟังก์ชันที่ชื่อว่า Main เสมอ (คล้ายกับint main() ในภาษา C/C++ หรือบล็อก Begin End. ในภาษา pascal
โดยที่ Main จะต้อง return void เสมอ(voidฟังก์ชัน คือฟังก์ชันที่ไม่มีการส่งค่ากลับ(return) เปรียบได้กับ procedure ในภาษา pascal และ Sub ในภาษา Basic)
static นั้นจะเป็นตัวบอกว่า code นั้นจะอยู่กับ class นั้นเลยโดยไม่ต้องมีการสร้าง instanceของคลาสนั้นขึ้นมาก่อน(ตอนนี้ยังไม่จำเป็นต้องเข้าใจ)
พารามิเตอร์(string[] args) มีไว้รับพารามิเตอร์จากทาง command line โดยรับมาเป็น อาเรย์ของ string เลย(ไม่จำเป็นต้องมี int argc เหมือนอย่างใน C/C++ เพราะ จำนวนของ พารามิเตอร์จะถูกระบุอยู่ใน property ของ args อยู่แล้ว

ให้แก้ code ภายใน class ให้เป็นดังนี้

string name, age;
Console.WriteLine("Hello World!");
Console.WriteLine("This is my first C# application");
Console.Write("What 's your name : ");
name = Console.ReadLine();
Console.Write("Howold are you : ");
age = Console.ReadLine();
Console.WriteLine("Hi {0}\nYou 're {1} years old", name, age);

เมื่อสั่งรันโปรแกรมด้วยการกดปุ่ม หรือ F5 แล้วจะพบกับหน้าต่างคล้าย ๆ แบบนี้

หากไม่เจอ ให้ไปที่เมนู View > Tools > Console

หรือถ้าใช้ #Develop 1.0.x จะขึ้นเป็น command prompt ของ Windows®


หากเขียนโปรแกรมด้วย Editor ธรรมดา ให้เติม Code นี้ลงไปในโปรแกรม

using System;

class FirstApplication {
public static void Main() {
string name, age
;
Console.WriteLine("Hello World!");
Console.WriteLine("This is my first C# application");
Console.Write("What 's your name : ");
name = Console.ReadLine();
Console.Write("Howold are you : ");
age = Console.ReadLine();

Console.WriteLine("Hi {0}\nYou 're {1} years old", name, age);
}
}

จะสังเกตได้ว่า code จะต่างจากด้านบนเล็กน้อย ตรงที่ ไม่มีบรรทัดที่ระบุ namespace และพารามิเตอร์ string[] args นั้นหายไป นั่นเป็นเพราะ 2 อย่างนั้นเป็นสิ่งไม่จำเป็น เรายังไม่ต้องใส่ก็ได้
เมื่อเซฟไฟล์เรียบร้อยแล้ว ให้เปิด command prompt แล้วพิมพ์

csc Main.cs

ได้ไฟล์ Main.Exe มา แล้วก็พิมพ์สั่งรันโดยการพิมพ์ Main จะได้ผลลัพธ์ดังนี้

หรือถ้าอยากให้ ได้ชื่อ executable file อย่างอื่น ก็ให้พิมพ์

csc /out:<filename> Main.cs เช่น

csc /out:hello.exe Main.cs

สำหรับตอนต่อไปจะเป็นเรื่องพื้นฐานของภาษา C# เช่นพวก data type และ control statement เช่นพวก if...else หรือคำสั่งที่ใช้วนลูป

อธิบาย code

string name, age; เป็นการประกาศตัวแปรประเภท string(ข้อความ) ชื่อ name และ age

name = Console.ReadLine(); รับค่าตัวแปรมาจาก command line

Console.WriteLine("Hi {0}\nYou 're {1} years old", name, age);
เมื่อรันถึงตรงนี้จะเห็นจากใน output เป็น

Hi TiD
You 're 21 years old


นั่นเป็นเพราะว่า ตัวแปร name ซึ่งมีค่าเป็น "TiD" ได้ถูกแทนที่ลงไปในตำแหน่ง {0} และตัวแปร age ซึ่งมีค่าเป็น "21" ได้ถูกแทนที่ลงไปตรง {1} และ "\n" จะถูกเปลี่ยนไปเป็นตัวอักษรขึ้นบรรทัดใหม่ ซึ่ง ทำให้เราเห็น ข้อความนี้ถูกแยกเป็น 2 บรรทัด สังเกตนะครับ การนับเลขในภาษานี้จะเริ่มจาก 0 เสมอ
เราสามารถเขียน code ด้านบนนี้ใหม่เป็น

Console.WriteLine("Hi " + name + "\nYou 're " +age + "years old");
ใครยังไม่เข้าใจก็ลองข้ามไปอ่านตอนที่ 5 ก่อนก็ได้

Escaped Character

'\' (backslash) แล้วตามด้วยตัวอักษรต่าง ๆ จะถูกตีความไปเป็นอักษรพิเศษอื่น ๆ ดังนี้

Escape characterความหมาย
\nตัวอักษรขึ้นบรรทัดใหม่

\ttab
\"" (เพราะว่าการพิมพ์ " ใน string จะถูกตีความไปเป็นการปิด string)
\\\

การบ้าน

จะให้อ่านอย่างเดียวแล้วไม่ให้ทำอะไรเลยก็ยังไงอยู่

  1. หากใครสังเกตใน code จะเห็นว่าเราให้ตัวแปร age เป็น string ซึ่งก็หมายความว่า user สามารถใส่ข้อมูลอะไรมาก็ได้ที่ไม่ใช่ตัวเลข ดังนั้นเราจึงจะเปลี่ยนบรรทัดประกาศตัวแปรใหม่ เป็น

    string name;
    int age;


    แล้วลองรันดูว่ามันเกิดอะไรขึ้น
  2. ลองเล่น ๆ อะไรกับ escaped character ดู

Caution : ใครใช้ #Develop 1.1.x ไม่ควรรันโดยใช้ Console ของโปรแกรมนะครับ ให้เข้า command prompt แล้วไปที่ directory ที่เก็บไฟล์ .exe (default เป็น <project path>\bin\debug\ แล้วรันจากในนั้นจะดีกว่า เพราะ Console ของ #Develop 1.1.x มีบั๊กอยู่พอควร หรือ download version 1.0.x มาใช้ดีกว่าครับ #Develop 1.0.3.1768

Tip: กด Ctrl + I ใน #Develop จะเป็นการทำ auto-indent ให้

Comment



smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry

Tweet

พยายามเข้า จะเอาใจช่วยว่ะ

#1 By ลิ่ว on 2005-06-04 11:25

เยเย แล้วจะเข้ามาอ่านทุกวัน

#2 By zkan on 2005-06-04 15:25

ขยันสุดยอด

#3 By nonsense on 2005-06-04 18:22

ยากเฟร่ยเฮ้ย.. -_-"
โห...
นับถือๆ

#5 By #G~nap# on 2005-06-04 23:53

เออมันเขียนละเอียดดีเว้ย

#6 By markpeak on 2005-06-05 22:02

add แล้วนาคับ (เอาไว้หัด C# อย่างเดียว อิอิ)
คำถามโง่ๆ 1) ไอ้ Main.cs นี่มันคือชื่อไฟล์ที่เราเซฟลงไปปะคับ
คำถามโง่ๆ 2) ทะไมตัวแปร name ถึงแทนด้วย {0} แล้ว age แทนด้วย {1} อ่าคับ ไม่เห็นมีบรรทัดไหนอ้างว่าตัวไหนแทนเป็นอะไรเลยนี่ งง

#7 By P.S. on 2005-06-07 09:47

P.S.: 1. ใช่ครับ
2. "Hi {0}\nYou 're {1} years old", name, age

ประโยคนี้หมายความว่า ให้เว้นที่ตรง {0} กับ {1} เอาไว้ เพื่อเติมค่่าที่หลัง โดยมันจะเอาค่ามาเติมเรียงตามลำดับ นั่นคือ เอา name มาใส่ตรง {0} แล้วเอา age มาใส่ตรง {1} ครับ

#8 By T!D on 2005-06-09 00:00

เจ๋งมากครับ...





ขอบคุณ

#9 By ปาม มี่ ♫ on 2005-06-15 13:58

งงเกี่ยวกับ Console :: Write
กับ Console :: writeLine

มากเลยอ่ะ มันต่างกันยังไงเหรอค่ะ

#10 By matao_ome (203.113.81.4) on 2005-06-19 13:07

matao_ome :
Console.Write() พิมพ์เสร็จแล้ว cursor จะอยู่ท้ายบรรทัดน่ะครับ(คือถ้าพิมพ์อะไรต่อมันก็จะต่อกันเลย)
แต่ Console.WriteLine() มันจะพิมพ์แล้วขึ้นบรรทัดใหม่ให้ด้วย

#11 By T!D on 2005-06-19 17:57

อืมขอบคุณค่ะที่บอกมา เข้าใจแล้วค่ะ
อยากถามต่อว่า
เช่น
int a,b=1;
Console::Write(S"a=");
a=Int32::Parse(Console::ReadLine());
while(b<=12){
a*b
กะ
while(b<12){

เนี้ยต่า่งกันยังไงเหรอค่ะ
ขอบคุณค่ะ

#12 By matao_ome (203.113.81.8) on 2005-07-01 23:06

matao_ome : ตอบช้าหน่อย พึ่งเห็นครับ
ก็ต่างกันที่
<=(น้อยกว่าหรือเท่ากับ) กับ <(น้อยกว่า) ไงครับ

#13 By T!D on 2005-07-04 19:51

ขอบคุณค่ะ

#14 By matao_ome (203.113.81.4) on 2005-07-20 22:44

เอาใจช่วยครับ...สู้ๆ กันทุกคน..

#15 By besuto (202.12.97.100 /10.177.112.88) on 2006-08-06 18:22

ช่วยหาพารามิเตอร์ของ console.writeและconsole.writeLineหน่อยนะ อยู่เว็บไหน

#16 By nutt (202.29.52.65 /192.168.41.222) on 2007-01-03 15:52

โอ้ยยย ขอบคุณจากใจค่ะ ตอนนี้กำลังหัดเขียน C# เขียนได้ละเอียดมากๆ แอดไว้ใน my fav เรียบร้อยแล้ว _/\_
p.s. จะเขียนแอพพลิเคชั่นติดต่อกับเซิร์ฟเวอร์อ่ะค่ะ ใช้ตัวนี้ดีป่าว คะหรือว่ามีภาษาอื่นแนะนำป่าว

#17 By won-won (58.147.48.222) on 2007-05-11 14:28

ดีเหมือนกัน กำลังหาที่ใช้พวก .NET พอดี โดยเฉพาะภาษา C#, C++ ไว้ว่างๆค่อยมาแจมด้วยดีกว่า

#18 By comsci46 (58.9.157.55 /192.168.182.175) on 2007-05-14 15:24

gjggfj


hbkh

#19 By (222.123.0.122) on 2007-10-15 02:46

ตอนนี้กำลังเรียนอยู่พอดีเลยค่ะ big smile

#20 By iiSonG on 2007-11-03 16:32

ผมหัดเขียนครับ เซ็ท ลงโปรแกรมตามที่คุณ TID บอกแล้ว เซ็ท PATH แล้วทำไมรันใน dos
csc Main.cs น่ะครับมันขึ้น
'csc' is not recognized as an internal or external command, operable program or batch file. น่ะครับ รบกวนตอบทีครับ

#21 By oonin (58.8.38.41) on 2007-11-08 21:34

run ได้แล้วครับ รันใน Sharp Develop เลย ตอนแรก ใน Sharp ของผมไม่มี Create Project แบบ Console เลย ลองทำวิธีใช้ editor กับ dos เลยมีปัญหา ผมเลยลอง remove Sharp ออกแล้วลงใหม่ ดันมี Console ให้ Create เลยทำได้แล้วครับ ยังไงก้อรบกวนตอบคำถามเรื่อง ปัญหาที่ผมโพสไว้ทีนะครับไว้เป็นความรู้ ^^ ขอบคุณคับ

#22 By oonin (58.8.38.41) on 2007-11-08 21:54

ขอบคุณนะค่ะ ... อ่านแล้วรู้สึกกระต้นให้ศึกษาต่อ

เพราะหมดกำลังใจเมื่อเจอบทความยากๆsad smile

#23 By มุ่งมั่น (124.120.175.64) on 2008-03-08 16:28

ปืนฉีดน้ำ

ยากมากมาย กำลังลองเล่นอยู่ครับ

#24 By อะไหล่แอร์ (124.120.160.104) on 2008-04-15 11:47

ขอบคุณครับ

ผมยังไม่รู้เรื่องเลยกับ C#

เคยแต่ C++ จนชินแล้ว

เหมือนกับว่าต้องเริ่มใหม่หมด

#25 By ~ ~ aimless ~ ~ on 2008-06-11 17:56

มีประโยชน์มาก ขอบใจ

#26 By (118.173.244.155) on 2008-06-22 20:41

พอดีผมเพิ่งเรียนอ่ะครับ

ลองทำการบ้านที่บอกให้ age เป็น int แล้ว มันติดบรรทัดนี้อ่ะครับ age = Console.ReadLine();

ถ้าจะให้คอมไฟล์ผ่าน ควรแก้ให้เป็นอะไรหรอครับ

#27 By kanata (124.157.203.250) on 2008-07-22 17:51

confused smile เย้ ผมจะมาอ่านทุกวันเลย ขอบคุณมาเลยนะครับbig smile big smile

#28 By I.n.w. (58.9.144.8) on 2008-12-31 19:09

ขอบคุณมากคะ เพิ่งเริ่มอยู่พอดี

#29 By sirinun (203.114.107.52) on 2009-03-18 11:05

ขอบคุณมากๆเลยค่ะ กำลังอ่านไปสอบเข้าทำงานพอดี

#30 By เอ (124.122.200.36) on 2009-04-20 19:20

ขอบคุณมาก

#31 By Haha (125.24.213.221) on 2009-07-23 19:26

HXtXCG lhsmlrjv verlfyoz mcqreajt

#32 By sIsEksIPzckuralr (89.248.172.50) on 2009-07-28 15:03