วันอังคารที่ 19 มีนาคม พ.ศ. 2556

การสร้างโปรเจคใน Visual Studio 2005


โปรเจคจะมีทั้งวินโดวส์ และเว็บ โดยโปรเจคเว็บจะถูกตั้งชื่อเป็นเว็บไซต์ (Web Site) ที่เราสนใจในที่นี้ จะถูกแยกออกมาดังภาพที่ 1-8
1-8.gifภาพที่ 1-8 การสร้างเว็บไซต์ใหม่



สำคัญมาก โปรเจคประเภท Web Application ที่เคยมีใน Visual Studio .NET 2003 จะหายไปใน Visual Studio 2005 แต่จะมีโปรเจคเว็บไซต์เข้ามาแทน แต่หลังจากที่ Visual Studio 2005 ออกมาได้ไม่นาน ไมโครซอฟต์ถูกบ่นมาจากนักพัฒนาชินกับโปรเจค Web Application ดังนั้นทางไมโครซอฟต์จึงได้ทำตัวติดตั้งโปรเจค Web Application เพิ่มเติมให้นักพัฒนาดาวน์โหลดเพิ่มฟรีในตอนหลัง ซึ่งคุณสามารถเข้าไปอ่านรายละเอียดหรือโปรเจคนี้ได้ที่http://msdn2.microsoft.com/en-us/asp.net/aa336618.aspx แต่อย่างไรก็ตามโปรเจค Web Application นี้ได้ถูกรวมอยู่ใน Visual Studio 2005 Service Pack 1 เรียบร้อยแล้ว ดังนั้นเราไม่จำเป็นต้องติดตั้งโปรเจค Web Application ซ้ำอีก หลังจากที่ติดตั้ง Service Pack 1 ไปแล้ว


เมื่อเลือกสร้างเว็บไซต์ใหม่แล้ว จะสามารถเลือกชนิดของโปรเจคเว็บดังภาพที่ 1-9
1-9.gif
ภาพที่ 1-9หน้าจอสำหรับสร้างเว็บไซต์ใหม่
ส่วนประกอบที่จำเป็นต้องเลือกในการสร้างโปรเจคมีอยู่ด้วยกัน 3 ส่วนดังนี้
ส่วนที่ 1 เทมเพลต
        จะเป็นส่วนที่ระบุว่ารูปร่างหน้าตาของโปรเจคจะประกอบด้วยไฟล์ และมีการอ้างอิงกับแอสเซมบลีตัวใดบ้าง  เทมเพลตที่มี จะคล้ายกับ Visual Studio .NET 2003 คือจะมีเทมเพลตที่เป็นทั้งเว็บไซต์ปกติ (ASP .NET Website) และเทมเพลตที่เป็นเว็บเซอร์วิส (ASP .NET Web Service)
ที่เพิ่มพิเศษเข้ามาคือ เทมเพลตเว็บเซอร์วิสที่เป็น Crystal Report และที่หายไปคือ เทมเพลตที่ใช้สร้าง Web Server Control ซึ่งต้องไปใช้วิธีเพิ่มเข้ามาในโปรเจคทีหลังเอง

เพิ่มเติม เราสามารถดาวน์โหลดเทมเพลตเพิ่มเติมเข้ามาในส่วน My Template ได้ โดยสามารถดาวน์โหลดได้ที่http://msdn.microsoft.com/asp.net/reference/design/templates/default.aspx ที่ลิงค์นี้จะมีเทมเพลตทั้งของภาษา VB .NET และ C# หลายชนิดให้เลือกโดยแบ่งตามจุดประสงค์ของเว็บไซต์ เช่น เว็บอีคอมเมิร์ส เว็บส่วนตัว หรือเว็บบริษัท

ส่วนที่ 2 Location
        จะเป็นตัวที่ระบุว่าเว็บไซต์ของเราจะถูกเก็บไว้ที่ใด ซึ่งเราสามารถระบบได้ทั้งเก็บในเครื่องเราเอง หรือเก็บไว้ในเครื่องอื่นที่อยู่ภายในเน็ตเวิร์ค หรืออาจจะเก็บไว้ใน FTP Server ก็ได้ ในการเก็บเว็บไซต์แต่ละแบบต้องการค่าพารามิเตอร์ที่ต่างกัน ขึ้นอยู่กับ Location ที่เราเลือกดังนี้
-          HTTP เก็บเว็บไซต์ไว้ใต้ Virtual Directory ของ IIS เราสามารถใส่ชื่อของเว็บเซิร์ฟเวอร์ และชื่อเว็บไซต์ที่ต้องการลงไปได้ หรืออาจกดปุ่ม Browse

1-10.gifภาพที่ 1-10การเลือก Location แบบ HTTP
-          File System เก็บเว็บไซต์ไว้ใต้โฟลเดอร์ของเครื่องเราเอง หรือเครื่องอื่นในเน็ตเวิร์ค เราสามารถตั้ง Path ที่ต้องการเก็บให้เป็นเครื่องของเราเอง หรือเป็น Path ที่อยู่ยนเน็ตเวิร์คก็ได้ หรืออาจกดปุ่ม Browse จะปรากฏไดอะล็อกให้เราเลือกดังภาพ 1-11

1-11.gifภาพที่ 1-11การเลือก Location แบบ File System
-          FTP เก็บเว็บไซต์ไว้ใน FTP เซิร์ฟเวอร์ ซึ่งการที่จะเข้าถึงได้นั้นเราต้องใส่ข้อมูลชื่อเซิร์ฟเวอร์ และไดเรคทอรี เป็นอย่างน้อย สำหรับ FTP เซิร์ฟเวอร์ที่ต้องการ Authentication เราต้องใส่ข้อมูลนี้เพิ่มเข้าไปด้วย หรืออาจกดปุ่ม Browse จะปรากฏไดอะล็อกให้เราเลือกดังภาพ 1-12

1-12.gifภาพที่ 1-12การเลือก Location แบบ FTP

ส่วนที่ 3 ภาษาที่ใช้
เราสามารถเลือกภาษาได้ตามความถนัด ไม่ว่าจะเป็น C#, VB .NET หรือก J# นอกจากนี้ ในโปรเจคเดียวกัน เราสามารถเขียนโค้ดหลายภาษารวมกันได้ เช่น ในหนึ่งโปรเจค เราสามารถสร้างเว็บฟอร์มที่หนึ่งเขียนด้วยภาษา C# ในขณะที่เว็บฟอร์มที่สองเขียนด้วยภาษา VB .NET ได้
แต่ภายในเว็บฟอร์มเดียวกัน เราจะไม่สามารถเขียนโค้ดแบบ Inline (เขียนโค้ดลงบนไฟล์ .aspx) เป็นคนละภาษากับโค้ดที่เป็นเขียนบน Code Behind (เขียนโค้ดลงบนไฟล์ .cs หรือ .vb) ได้

สภาพแวดล้อมในการทำงานของ Visual Studio 2005

สภาพแวดล้อมการทำงานใน Visual Studio 2005 ไม่ได้แตกต่างไปจาก Visual Studio .NET 2005 เท่าใดนัก แต่จะมีการเพิ่มเติมวินโดว์ใหม่เข้ามา ซึ่งจะกล่าวถึงในส่วนต่อไป สภาพแวดล้อมของ Visual Studio 2005 แสดงดังภาพ 1-15
1-15.gif
ภาพที่ 1-15 สภาพแวดล้อมของ Visual Studio 2005
ส่วนสภาพแวดล้อมจะแบ่งออกเป็นส่วนหลักๆ  5 ส่วนดังนี้
-          ส่วนที่ 1ทูลบ็อกซ์ สำหรับแสดงคอนโทรลต่างๆ ที่ลากมาวางในตัว Document Window ได้ และ Server Explorer สำหรับแสดงบริการต่างๆ ที่มีบนเซิร์ฟเวอร์
-          ส่วนที่ 2Document Window เป็นส่วนหลักในการออกแบบ ไม่ว่าจะเป็นออกแบบเว็บฟอร์ม ออกแบบคลาส เขียนโค้ด HTML หรือ Code Behind
-          ส่วนที่ 3Solution Explorer แสดงไฟล์และโฟลเดอร์ต่างๆ ที่มีในโปรเจค
-          ส่วนที่ 4Task List, Error List และ Output สำหรับแสดงงานที่เราบันทึกไว้ Error List สำหรับแสดงข้อผิดพลาดจากการคอมไพล์ และ Output ที่แสดงผลลัพธ์จากการคอมไพล์
-          ส่วนที่ 5วินโดว์สพร็อพเพอตี้ แสดงคุณสมบัติของไฟล์ หรือคอนโทรลที่เราสนใจอยู่ และเราสามารถปรับค่าได้จากหน้าต่างนี้

ที่มา http://www.aspnetthai.com

ตัวแปร และชนิดของตัวแปรในภาษา VB และ C#


การใช้ตัวแปรและชนิดของตัวแปร
ภาษา C# และ VB.NET นั้นเป็นภาษาที่เข้มงวดเรื่องชนิดของตัวแปร (Strongly Typed Programming Language) นั่นหมายความว่า คุณจะไม่สามารถใช้ตัวแปรชนิดที่เป็นตัวอักษร มาเก็บค่าที่เป็นตัวเลข หรือใช้ตัวแปรที่เก็บตัวเลขจำนวนเต็ม มาเก็บเลขทศนิยม หรือว่าบวกตัวแปรที่เป็นตัวเลข กับค่าคงที่ที่เป็นข้อมูลตัวอักษรได้ อย่างที่คุณอาจจะเคยทำได้ในภาษา Visual Basic ด้วยการใช้ตัวแปรชนิด Variant หรือไม่กำหนด Type ของตัวแปรเลย ในขั้นตอนการประกาศตัวแปร
การที่ผู้ออกแบบภาษากำหนดให้มีความเข้มงวดกับชนิดของตัวแปรก็เพื่อให้คอมไพเลอร์ สามารถวิเคราะห์โค้ด และคาดการณ์ล่วงหน้าได้ถึงความผิดพลาดที่จะเกิดขึ้นจากการใช้ตัวแปรเพื่อเก็บข้อมูลผิดประเภทในขณะที่ทำการคอมไพล์โค้ด ซึ่งถ้าหากว่าภาษาอนุญาตให้มีการใช้ตัวแปรเก็บค่าใดๆ ก็ได้ ความผิดพลาดที่จะเกิดขึ้นได้ก็จะรู้ได้ต่อเมื่อโปรแกรมกำลังทำงานอยู่เท่านั้น ทำให้เสถียรภาพของโปรแกรมลดลง เนื่องจากความผิดพลาดอาดเร็ดรอดจากการตรวจสอบไปได้ แต่ประโยชน์ที่สำคัญที่สุดของ Strong Typing ก็คือ ตัวภาษาไม่จำเป็นต้องมีขั้นตอนในการตรวจสอบชนิดของตัวแปร และแปลงข้อมูลของตัวแปรกลับไป กลับมาในขณะที่โปรแกรมกำลังทำงาน จึงทำให้ประสิทธิภาพโดยรวมของโปรแกรมนั้นสูงขึ้น
สำหรับประเภทของตัวแปรพื้นฐานในภาษา C# และ VB.NET นั้น มีอยู่ด้วยกัน ดังตารางที่ 2-1 นี้
Type
(C#)
Type (VB.NET)พื้นที่ในการ
เก็บข้อมูล (บิต)
ช่วงของข้อมูลที่สามารถเก็บได้
sbyteSByte8–128 ถึง 127
shortShort16–32,768 ถึง 32,767
intInteger32–2,147,483,648 ถึง 2,147,483,647
longLong64–9,223,372,036,854,775,808 ถึง
9,223,372,036,854,775,807
byteByte80 ถึง 255
ushortUShort160 ถึง 65,535
uintUInteger320 ถึง 4,294,967,295
ulongULong640 ถึง 18,446,744,073,709,551,615
floatSingle321.5 × 1045 ถึง 3.4 × 1038 มีทศนิยมได้ 7 ตำแหน่ง
doubleDouble645.0 × 10324 ถึง 1.7 × 10308 มีทศนิยมได้ 15 ตำแหน่ง
decimalDecimal1281.0 × 1028 ถึง 7.9 × 1028 มีทศนิยมได้ 28 ตำแหน่ง
DateTime(ไม่มีคียเวิร์ด)Date64เที่ยงคืนของวันที่ 1 มกราคม ค.ศ. 1 ถึง 23:59:59 ของวันที่ 31 ธันวาคม ค.ศ. 9999
charChar160 ถึง 65,535 ใช้เก็บตัวอักษรในแบบ Unicode จำนวน 1 ตัวอักษร
boolBoolean1true และ false
stringString32++ข้อมูลตัวอักษรแบบ Unicode ได้สูงสุด 2,147,483,647 ตัวอักษร
o
bject
Object32++ข้อมูลประเภท Object
ตารางที่ 2-1 ชนิดของตัวแปรมาตรฐานใน C#
ตัวแปรทั้งหมด ยกเว้น 2 ชนิดสุดท้าย เป็นตัวแปรประเภท Value Type หรือ ตัวแปรที่เก็บข้อมูลอยู่ในตัวเองโดยตรง แต่สำหรับตัวแปรชนิด string และ object นั้น เป็นตัวแปรประเภท Reference Type ที่ทำหน้าที่เก็บ Link ไปยังข้อมูลจริง ที่ถูกเก็บไว้ในหน่วยความจำอีกส่วนหนึ่ง ซึ่งตัวแปรประเภท Reference Type นี้ จะใช้เก็บข้อมูลประเภท Object ซึ่งผู้เขียนจะกล่าวถึงอีกครั้งหนึ่ง ในส่วนของ Object Oriented Programming
การประกาศใช้ตัวแปร แบบพื้นฐานสามารถทำได้โดยใช้คำสั่งในลักษณะ ชื่อ Type ตามด้วยชื่อตัวแปร ดังนี้
  C#
Int     a      = 0;
string  b      = “The String”;
(ชนิดตัวแปร)   (ชื่อตัวแปร)   =              (ค่าเริ่มต้น);
      ส่วน VB.NET นั้น ยังคงใช้รูปแบบเดิม คือ Dim ตามด้วยชื่อตัวแปร As ตามด้วย Type ของตัวแปร คล้ายกับคำพูดว่า “ประกาศ a เป็น Integer” หรือ “ประกาศ B เป็น String” ดังนี้
  VB
Dim     a      As Integer = 0
Dim     b      As String  = “The String”;
                         (ชื่อตัวแปร)            (ชนิดตัวแปร) (ค่าเริ่มต้น);

สำหรับการตั้งชื่อตัวแปร หรือ Identifier นั้น มีข้อจำกัดอยู่เพียง 3 ประการคือ
·        ชื่อตัวแปรจะต้องขึ้นต้นด้วยตัวอักษร หรือสัญลักษณ์ Underscore (‘_’) เท่านั้น
·        สัญลักษณ์ที่สามารถใช้ได้ในการตั้งชื่อ คือเครื่องหมาย Underscore (‘_’) เท่านั้น
·        ไม่สามารถตั้งชื่อซ้ำกับคีย์เวิร์ดได้ เช่น ตัวแปรชื่อ if
Tip:
สำหรับ C# นั้น ถ้าหากมีความจำเป็นที่จะต้องใช้ชื่อซ้ำกับคีย์เวิร์ดจริงๆ คุณสามารถใช้เครื่องหมาย @ นำหน้า ก็จะสามารถใช้ชื่อคีย์เวิร์ดนั้นเป็นชื่อตัวแปรได้ เช่น object @object;

ควรตั้งชื่อตัวแปรอย่างไรจึงจะเหมาะสม?
ในการตั้งชื่อตัวแปรนั้น ไม่มีกฏเกณ์ที่ตายตัว และมีรูปแบบการตั้งชื่อได้หลายแบบ คุณสามารถเลือกใช้ชื่อใดก็ได้ที่เหมาะสม ตราบใดที่ชื่อนั้นไม่ผิดข้อจำกัดทั้ง 3 ข้อที่ผู้เขียนได้กล่าวถึงไปแล้ว สำหรับทางไมโครซอฟท์เอง ก็ได้มีการร่างคำแนะนำในการตั้งชื่อเอาไว้ด้วย เพื่อให้เกิดเอกลักษณ์ในการตั้งชื่อสำหรับโปรแกรมที่พัฒนาบนแพลตฟอร์ม .NET ซึ่งหลักเกณฑ์คร่าว ๆ ตามคำแนะนำดังกล่าว ได้แก่:
·        ใช้ชื่อที่สื่อความหมาย และไม่ใช้ตัวย่อ เช่น
Num ควรใช้ชื่อว่า number
Idx ควรใช้ชื่อว่า Index
passwd ควรใช้ชื่อว่า Password
i ควรใช้ชื่อว่า index (แต่ในความเป็นจริงแล้ว เรามักจะยังใช้กันอยู่)
แต่สำหรับตัวย่อ ID และ OK นั้น อนุญาตให้สามารถใช้ได้
·        สามารถใช้ชื่อที่ยาวกว่า 1 คำได้ แต่คำแรกจะต้องเป็นตัวอักษรตัวเล็กทั้งหมด และเมื่อขึ้นต้นคำใหม่ ให้ใช้ตัวอักษรตัวพิมพ์ใหญ่ขึ้นต้น เช่น
Username ควรใช้ว่า userName
thisisvariable ควรใช้ชื่อว่า thisIsVariable
isOK นั้น ควรใช้ชื่อว่า isOk
userID นั้น ควรใช้ชื่อว่า userId
·        ไม่ใช้ควรเครี่องหมาย Underscore ในการแบ่งคำ แทนการใช้ตัวอักษรตัวพิมพ์ใหญ่
total_income ควรใช้ว่า totalIncome
pixel_size ควรใช้ว่า pixelSize
·        ไม่ตั้งชื่อตัวแปรที่แตกต่างกันเพียงตัวอักษรตัวพิมพ์ใหญ่ และตัวพิมพ์เล็ก แม้ว่าภาษา C# นั้นจะถือว่าเป็นตัวแปรคนละตัวกันก็ตาม เช่น ถ้าหากมีตัวแปรชื่อ Number แล้วไม่ควรมี ตัวแปรชื่อ number ซ้ำกัน
      การตั้งชื่อตามคำแนะนำนี้ จะช่วยให้โค้ดที่คุณเขียนไว้อ่านง่ายขึ้น และสามารถทำความเข้าใจได้ง่าย เมื่อคุณต้องการกลับมาแก้ไขในภายหลัง ซึ่งอาจจะเป็นเวลาล่วงเลยไปหลายวัน หรือหลายเดือนไปแล้ว
Array
      Array ใน C# นั้นก็มีลักษณะไม่แตกต่างอะไร จาก Array ในภาษาอื่นๆ ที่สนับสนุนการใช้งาน Array แต่ในด้านของไวยกรณ์นั้น C# ใช้การประกาศ และใช้งาน Array ในลักษณะของตัวเอง ไม่ได้ตามแบบของ Java หรือ C++ เสียทีเดียว ซึ่งไวยกรณ์ในการประกาศใช้ Array นั้น จะมีลักษณะดังนี้
  C#
int [] a  = new int [10];
 (ชนิด) (ชื่อของ Array)                            (ขนาดของ Array);
      สำหรับ VB.NET นั้น ยังคงมีการประกาศในลักษณะเดิม แต่ Index เริ่มต้นของ Array จะเปลี่ยนเป็น 0 แทนที่จะเป็น 1 เหมือนใน VB6 และขนาดของ Array ใน VB.NET นั้นจะเป็นการกำหนดค่า Index สูงสุดของ Array แทนที่จะเป็นขนาดจริง นั่นหมายความว่า ถ้าคุณต้องการ Array ขนาด 10 ช่อง คุณจะต้องใช้ 9 เป็นขนาดของ Array 
  VB
Dim  a(9) as Integer
นอกจากนี้แล้ว สำหรับภาษา C# คุณยังสามารถกำหนดค่าให้กับตำแหน่งต่างๆ ของ Array ได้ทันที ตั้งแต่การประกาศใช้งาน Array โดยการใช้คำสั่งดังนี้
  C#
int [] a  = new int [] {1,2,3};
      ซึ่งจะเป็นการประกาศใช้งาน Array ที่มีขนาด 3 ตำแหน่ง และมีค่า 1, 2 และ 3 ใน 3 ตำแหน่งนั้น ตามลำดับ ถ้าหากว่าคุณไม่ได้กำหนดขนาดของ Array ไว้ ตัว Array ที่ถูกสร้างขึ้น จะมีขนาดเท่ากับจำนวนข้อมูล ที่คุณใส่ไว้ในเครื่องหมายปีกกา แต่ถ้าหากำหนดไว้ คุณก็จะต้องใส่ข้อมูลให้เท่ากับขนาดที่ระบุไว้
สำหรับ VB.NET นั้น ก็สามารถทำการประกาศแบบนี้ได้เช่นเดียวกัน ด้วยคำสั่ง
  VB
Dim a() As Integer = New Integer() {1, 2, 3}
หรือ
Dim a As Integer() = New Integer() {1, 2, 3}
ส่วนการใช้งาน Array ใน C# นั้น จะมีลักษณะคล้ายกับภาษาใน C-Style อื่นๆ คือการใช้ เครื่องหมาย [] (เครื่องหมายBracket) ในการบอกตำแหน่งที่ต้องการเรียกใช้งาน
  C#
int [] a        = new int [10];
       a [9]    = 10;
 (ชื่อของ Array) (ตำแหน่งที่ต้องการเรียกใช้);
และการใช้งาน Array ของ VB.NET นั้น ก็ยังคงใช้เครื่องหมาย วงเล็บ ‘()’ เช่นเดียวกับใน VB6
  VB
Dim a As Integer() = New Integer(9) {}
a(9) = 10
(ชื่อของ Array) (ตำแหน่งที่ต้องการเรียกใช้);

รู้จักกับภาษา VB และ C# ที่ใช้สำหรับสร้างเว็บแอพพลิเคชั่นใน ASP.NET


 อันที่จริงแล้ว เนื่องจากเบื้องหลังของ ASP.NET นั้น ก็คือโปรแกรมที่ทำงานอยู่บน .NET Framework คุณจึงไม่ได้ถูกจำกัดว่า จะต้องเขียนโค้ด ASP.NET ด้วยภาษาใด ภาษาหนึ่งเท่านั้น ซึ่ง C# ก็เป็นหนึ่งในภาษาที่ .NET นั้นรองรับ และอาจะเรียกได้ว่า เป็นภาษาอย่างเป็นทางการของแพลตฟอร์ม .NET แต่ถ้าหากว่าคุณเป็นผู้ที่เคยพัฒนาเว็บไซต์ด้วย ASP มาก่อน ภาษาที่มีพื้นฐานมาจากภาษา Visual Basic เดิม อย่าง Visual Basic.NET ก็อาจจะเป็นตัวเลือกที่ดูคุ้นเคยมากกว่า แต่ไม่ว่าคุณจะพัฒนาด้วยภาษาอะไรก็ตาม ในทางทฤษฎีแล้ว จะไม่มีผลใด ๆ กับประสิทธิภาพโดยรวมของโปรแกรมแต่อย่างใด และทุกภาษา สามารถเข้าถึงฟีเจอร์ต่าง ๆ ของ .NET ได้อย่างเท่าเทียมกัน
อย่างไรก็ดี ถ้าหากว่าคุณเคยมีพื้นฐานจาก Java หรือว่า C++ มาก่อน หรือต้องการจะเรียนรู้ “ภาษาทางการ” ของแพลตฟอร์ม .NET ภาษา C# ก็เป็นน่าจะเหมาะสมที่สุดสำหรับคุณ ซึ่งภายในบทนี้ ผู้เขียนจะแนะนำถึงโครงสร้างพื้นฐานและการใช้งานภาษา C# พร้อมกับ VB.NET อย่างคร่าว ๆ สำหรับผู้ที่เคยมีประสบการณ์ในการเขียนโปรแกรมมาก่อนแล้ว
ทำความู้จักกับ C#
ภาษา C# นั้น เป็นภาษาที่มีรูปร่างหน้าตาและโครงสร้างในแบบที่เรามักจะเรียกว่า “C-Style Language” หรือ ภาษาที่มีลักษณะคล้ายคลึงกับภาษา C นั่นเอง ซึ่งแม้แต่ภาษาที่โปรแกรมเมอร์ชาวไทยคุ้นเคยกันดีอย่าง Java และ PHP นั้นก็จัดอยู่ในภาษากลุ่มนี้เช่นกัน นั่นก็เพราะว่า “C-Style” เป็นรูปแบบภาษาที่โปรแกรมเมอร์ส่วนใหญ่ ที่มักมีพื้นฐานมาจากภาษา C คุ้นเคย แต่ ก็อาจจะเป็นภาษาที่ดูแปลกตา สำหรับผู้ที่ไม่มีพื้นฐานการเขียนโปรแกรมมาก่อน หรือผู้ที่คุ้นเคยกับภาษาที่ค่อนข้างดูคล้ายกับภาษาพูดอย่าง Visual Basic ไปเลยก็เป็นได้ ดังนั้นถ้าคุณมีพื้นฐานจากภาษาในกลุ่ม C-Style อยู่ก่อนแล้ว ก็อาจจะข้ามในส่วนของการแนะนำโครงสร้างภาษานี้ และไปเริ่มอ่านในส่วนของการแนะนำฟีเจอร์เฉพาะของภาษา C# ได้เลย แต่สำหรับผู้ที่เคยพัฒนาโปรแกรมด้วยภาษา Visual Basic มาก่อน หรือผู้ที่กำลังเริ่มเป็นโปรแกรมเมอร์มือใหม่ การแนะนำนี้เป็นส่วนสำคัญ ที่ไม่ควรมองข้าม

ทำความรู้จักกับ VB.NET
สำหรับใน .NET Framework นั้น อีกภาษาหนึ่งที่ได้รับความนิยมไม่แพ้กัน ก็คือภาษา VB.NET ซึ่งได้รับการต่อยอดมาจากภาษายอดนิยมอย่าง VB6 นั่นเอง สิ่งสำคัญที่เพิ่มเข้ามาใหม่ใน VB.NET ก็คือความสามารถด้าน OOP (Object Oriented Programming: การเขียนโปรแกรมเชิงวัตถุ) ที่ได้รับการปรับปรุงจนเรียกได้ว่า VB.NET นั้นเป็นภาษา OOP สมบูรณ์แบบ ในขณะที่ VB6 นั้นเป็นภาษาที่อ้างอิงถึง OO แต่ว่าไม่ได้เป็นภาษาที่มีความสามารถด้าน OOP แต่ในด้านความเปลี่ยนแปลงอื่นๆ ในด้านของภาษา หรือไวยกรณ์นั้น นับได้ว่า ไม่มีความแตกต่างจากของเดิมเลย ซึ่งในบทนี้ ผู้เขียนจะเปรียบเทียบไวยกรณ์ของทั้ง C# และ VB.NET ไปพร้อมกัน

สิ่งที่ทำให้ C-Style น่ากลัว
ผู้ที่เคยเขียน VB6 มาก่อน และต้องการจะทดลองการใช้งาน C# คงจะเห็นด้วยกับผู้เขียนว่า ภาษาในแบบ C# นั้น ออกจะไม่ค่อยเป็นมิตรเท่าที่ควร เพราะว่ามีการใช้ตัวอักษรแปลกๆ และลักษณะการเขียนนั้น ก็ไม่เหมือนกับภาษาเขียนธรรมดาสักเท่าไหร่ ซึ่งตัวอักษรที่ทำให้ C# และภาษาในกลุ่ม C-Style ดูเป็นภาษาที่น่ากลัว ก็เห็นจะมีอยู่ด้วยกัน 4 ตัว ได้แก่ เครื่องหมายอัฒภาค (Semicolon - ‘;’) เครื่องหมาย == (เครื่องหมายเท่ากับติดกัน 2 ตัว) วงเล็บปีกกา (‘{‘ และ ‘}’) และ Backslash (\) ดังนั้น เพื่อให้การอ่านโค้ดที่คุณกำลังจะพบในส่วนต่อ ๆ ไปสะดวกยิ่งขึ้น เราจะมาทำความรู้จักับตัวอักขระพิเศษเหล่านี้กันก่อน
";"เป็นการใช้สำหรับการจบคำสั่งในตัวโปรแกรม ดังเช่นในโค้ดสมมุติด้านล่างนี้
     start_engine();
     shift_to_drive_gear(); accelerate();

จะเห็นว่า แม้จะมีโค้ดอยู่เพียง 2 บรรทัด แต่มีคำสั่ง (ซึ่งดูเหมือนจะเป็นการเริ่มออกรถ) อยู่ 3 คำสั่ง ถูกคั่นด้วยเครื่องหมาย ‘;’ นั่นเอง
ดังนั้นในภาษา C# ไม่ว่าคุณจะกด Enter เพื่อขึ้นบรรทัดใหม่กี่ครั้ง Compiler ของ C# ก็ยังถือว่า เป็นคำสั่งเดียวกัน จนกว่าจะมีเครื่องหมาย ‘;’ เพื่อบอกว่า คำสั่งนั้นได้จบลงแล้ว จึงอาจเปรียบเทียบได้ว่า เครื่องหมาย ‘;’ มีหน้าที่คล้ายกับ เครื่องหมาย ‘.’ ในภาษาอังกฤษ เพื่อจบประโยคนั่นเอง               
การมีเครื่องหมาย ‘;’ นี้ ก็เป็นอีกจุดหนึ่งที่ภาษา C# นั้น ตรงกันข้ามกับภาษา Visual Basic อย่างสิ้นเชิง นั่นก็เพราะว่า ถ้าหากคุณต้องการแบ่งโค้ดที่ยาวเกินกว่าหน้าจอแนวนอนเป็นหลาย ๆ บรรทัด ใน Visual Basic คุณจะต้องทำการใส่เครื่องหมาย ‘_’ เพื่อบอกว่า โค้ดที่อยู่หลังเครื่องหมายนี้ ยังเป็นโค้ดในคำสั่งเดียวกันกับโค้ดที่อยู่ก่อนหน้าเครื่องหมายนี้อยู่ ขณะที่ในภาษา C# นั้นสามารถกด Enter เพื่อขึ้นบรรทัดใหม่ได้เลย แล้วใช้เครื่องหมาย ‘;’ เพื่อบ่งบอกว่า คำสั่งนั้นสิ้นสุดแล้ว ตรงนี้ จึงเป็นส่วนที่ผู้ที่คุ้นเคยกับ Visual Basic อาจจะรู้สึกไม่สะดวกนักในตอนแรก เนื่องจากจะต้องใส่เครื่องหมาย ‘;’ ทุกครั้ง เพื่อจบคำสั่ง จึงเป็นอีกจุดหนึ่ง ที่ต้องทำความคุ้นเคย
VBC#

A = 1
A = A + 2
B = “This is Long “ & _
          “Sentence”

A = 1;
A = A + 2;
B = “This is Long” +
          “Sentence”;
โค้ดตัวอย่างที่ 2-1 เปรียบเทียบการขึ้นบรรทัดใหม่ในโค้ดของ 2 ภาษา
"=="
ปกติแล้ว เราจะคุ้ยเคยกันดีกับเครื่องหมายเท่ากับ (‘=’) ในทางคณิตศาสตร์ แต่เนื่องจากเครื่องหมายเท่ากับนั้น มีความหมายกำกวมอยู่ 2 ด้าน ได้แก่การใส่ค่าทางด้านขวาของเครื่องหมายให้กับตัวแปรที่อยู่ด้านซ้าย และการเปรียบเทียบค่าของตัวแปร (หรือค่าคงที่) ที่อยู่สองข้างของเครื่องหมาย ตัวอย่างเช่น
A = 1 อาจมีความหมายได้ว่า
                ให้ตัวแปร A มีค่า 1 ในประโยค Let A = 1 หรือ
                ตัวแปร A นั้น มีค่าเท่ากับ 1 ในประโยค If A = 1
ในการใช้ในภาษาทั่วไป ที่ไม่ใช่การเขียนโปรแกรม ความกำกวมนี้อาจจะสามารถอ้างอิงได้จากคำพูดรอบข้าง (เช่น คำว่า Let และ If ) แต่เพื่อลดความกำกวมนั้นในการเขียนโปรแกรม ผู้ออกแบบภาษาในกลุ่ม C-Style จึงได้บัญญัติว่า ให้ ‘==’ มีความหมาย ในเชิงการเปรียบเทียบ หรือความหมายที่สองของเครื่องหมายเท่ากับ ตามตัวอย่างนั่นเอง เราจึงจะพบเครื่องหมาย ‘==’ นี้ในคำสั่งที่เกี่ยวข้องกับการตรวจสอบค่า เช่น คำสั่ง If ที่ผู้เขียนจะกล่าวถึงต่อไป เป็นต้น
"{" และ "}"เครื่องหมายวงเล็บปีกกานั้น ใช้เพื่อการรวมคำสั่งหลายๆ คำสั่ง ให้เป็น กลุ่มเดียวกันเรียกว่า Block โดยมากมักจะเป็นการใช้ร่วมกับคีย์เวิร์ดต่างๆ เพื่อบ่งบอกว่า โค้ดที่อยู่ระหว่าง { และ } นั้น เป็นโค้ดของคีย์เวิร์ดตัวไหน
จากตัวอย่างที่ 2-2 นี้ จะเห็นได้ว่า คำสั่ง A = 2 นั้น อยู่ในกลุ่มเดียวกับคีย์เวิร์ด if และ A = 3 นั้นเป็นของกลุ่มคีย์เวิร์ด Else
VBC#

A = 1
If A = 1 Then
     A = 2
Else
     A = 3
End If

A = 1;
if ( A == 1 )
{
     A = 2;
} else {
     A = 3;
}
โค้ดตัวอย่างที่ 2-2 เครื่องหมายวงเล็บปีกกาเพื่อใช้กำหนด Block ของโค้ด
"\"เครื่องหมาย Backslash นี้ ปกติแล้วจะไม่มีใช้จริงในชีวิตประจำวัน แต่คุณจะพบได้บ่อยที่สุดใน My Computer นั่นเอง เนื่องจากว่า เป็นเครื่องหมายที่ใช้ในการบ่งบอกโฟลเดอร์ภายในเครื่องคอมพิวเตอร์ที่ใช้ระบบปฏิบัติการ Windows (เช่น C:\Windows เป็นต้น)
แต่ในภาษาที่อยู่ในจำพวก C-Style นั้น ตัวอักษรนี้จะใช้ในการแทนค่าเป็นตัวอักษรที่ไม่สามารถพิมพ์ได้ตามปกติ อย่างเช่น Tab หรือตัวอักษรขึ้นบรรทัดใหม่
ในภาษา Visual Basic นั้นจะไม่มีการใช้การแทนที่ตัวอักษรอย่างที่เห็นอยู่นี้ แต่ผู้ออกแบบได้ใช้ชื่อค่าคงที่ แทนตัวอักษรดังกล่าวไว้ อย่างเช่น เครื่องหมาย Tab ก็คือ vbTab หรือการขึ้นบรรทัดใหม่ ก็คือค่าคงที่ที่ชื่อว่า vbCr (\r) หรือ vbCrlf (\r\n) ดังโค้ดตัวอย่างที่ 2-3 นี้ ซึ่งค่าของตัวแปร A จะเหมือนกันในทั้ง 2 ภาษา
VBC#

A = “This is ” & _
     vbCrLf &_
     “new line”

A = “This is \r\n” +
          “new line”;
โค้ดตัวอย่างที่ 2-3 การใช้ Escape Character ใน C#

ที่มา http://www.aspnetthai.com

ความรู้พื้นฐาน ASP.NET ตอน วงจรชีวิตของเว็บฟอร์ม


  เมื่อไคลเอนต์มีการร้องขอไฟล์แบบไดนามิคไปที่ IIS การเรียกนี้จะถูกส่งต่อไปให้กับ aspnet_isapi.dll จากนั้นจะส่งผ่านเป็นทอดๆ ให้กับ HTTP Module และสุดท้ายก็จะมาทำงานที่ HTTP Handler ที่เป็นตัวรันเว็บฟอร์ม ดังภาพที่ 5-1
5-1.jpg
ภาพที่ 5-1 การจัดการกับการเรียกไปยังเว็บฟอร์มของ IIS
        เมื่อการร้องขอไฟล์เว็บฟอร์มมาถึง HTTP Handler ของเว็บฟอร์ม และจะมีการเรียกเมธอด ProcessRequest และเข้าสู่วงจรชีวิตของเว็บฟอร์มดังภาพที่ 5-2
5-2.jpg
ภาพที่ 5-2 วงจรชีวิตของเว็บฟอร์ม
        จากภาพที่ 5-2 เราจะแบ่งขั้นตอนการทำงานย่อยของเมธอด ProcessRequest ออกได้เป็น 8 ขั้นตอนดังนี้

ขั้นตอนที่ 1 Instantiation
ในขึ้นตอนนี้ ASP .NET จะมีการสร้างอ็อปเจ็กต์ของเว็บฟอร์มขึ้นมาโดยอัตโนมัติ ไม่ว่าเว็บฟอร์มของเราจะมีโค้ดแบบ Inline หรือ Code Behind ก็ตาม โดย ASP.NET จะเข้าไปทำการอ่านแท็กต่างๆ ที่อยู่ในมุมมองของ Source ในไฟล์ .aspx แล้วทำการสร้างอ็อปเจ็กต์เว็บฟอร์มขึ้นมาก่อน จากนั้น จึงทำการสร้างอ็อปเจ็กต์ของคอนโทรลแต่ละตัวที่อยู่ในเว็บฟอร์ม
ขั้นตอนที่ 2 Initialization
หลังจากที่มีการสร้างลำดับชั้นของคอนโทรลเสร็จแล้ว จะเข้ามาในส่วนของเหตุการณ์เริ่มต้น (Initialization) ของทั้งเว็บฟอร์ม และของคอนโทรลภายในเว็บฟอร์ม เหตุการณ์นี้ตรงกับเมธอด OnInit ของทั้งเว็บฟอร์ม และคอนโทรล โดยเมธอด OnInit ของคอนโทรลจะถูกเรียกก่อนจนครบทุกตัว จากนั้นจึงทำการเรียกเมธอด OnInit ของเว็บฟอร์ม
สำหรับเมธอด OnInit ของเว็บฟอร์ม เราสามารถเห็นเมธอดนี้ได้ ในตอนที่เพิ่มเว็บฟอร์มเข้ามาใหม่ในโปรเจคของ Visual Studio .NET 2003 เราจะสังเกตุเห็นส่วนของ Web Form Designer generated code ซึ่งถ้าคลิกเข้าไปดูภายในจะพบว่ามีเมธอด OnInit อยู่ภายใน และเราสามารถเข้าไปเขียนโค้ดเพิ่มเติมในส่วนนี้ได้ แต่สำหรับ Visual Studio 2005 ส่วนนี้จะถูกซ่อนไว้ ถ้าหากเราต้องการเขียนโค้ดเพิ่มในส่วนนี้เราต้องเพิ่มเมธอด OnInit นี้เข้าไปเองดังโค้ดตัวอย่างที่ 5-4
VB

 Protected Sub Page_Init(ByVal sender As Object, _
                       ByVal e As System.EventArgs) Handles Me.Init

        Me.OnInit(e)
        ‘ Add your custom Init here
        ...

 End Sub
C#

protected override void OnInit(EventArgs e){
      base.OnInit(e);
      //Add your custom OnInit here
      …}
โค้ดตัวอย่างที่ 5-4 ตัวอย่างการสร้างเมธอด OnInit ของเว็บฟอร์ม

ขั้นตอนที่ 3 โหลด View State
การโหลดค่าจาก View State จะทำเฉพาะตอนที่เว็บฟอร์มมีการ Post back เท่านั้น ในขั้นตอนนี้ ASP .NET จะทำการโหลดค่าจาก View State แล้วนำค่านี้ไปกำหนดให้กับคอนโทรลในเว็บฟอร์มตามลำดับชั้นของอ็อปเจ็กต์เว็บฟอร์ม และคอนโทรลในเว็บฟอร์ม สำหรับค่าใน View State นี้ บางครั้งอาจถูกแก้ไขโดยแฮกเกอร์ได้ เพื่อมีเจตนาที่ไม่ดีบางอย่าง ในบทถัดไปจะได้เรียนรู้ถึงวิธีการป้องกัน การแก้ไขข้อมูลใน View State
ขั้นตอนที่ 4 โหลด Post Back Data
จะเกิดเมื่อเว็บฟอร์มมีการ Post back เท่านั้น ขั้นตอนนี้เว็บฟอร์ม จะทำการโหลดค่าจาก HTTP POST Headers แล้วส่งต่อค่าที่เหมาะสมให้กับเซิร์ฟเวอร์คอนโทรลแต่ละตัวที่ทำการอิมพลีเมนต์อินเตอร์เฟส IPostBackDataHandler หลังจากนั้นเซิร์ฟเวอร์คอนโทรลจะทำการเรียกเมธอด LoadPostData เพื่อดึงค่าที่เว็บฟอร์มส่งให้ไปกำหนดพร็อพเพอตี้ Text ให้ตัวเอง ตัวอย่างของการโหลดค่าในขั้นตอนนี้ดังภาพที่ 5-5
5-5.jpg
ภาพที่ 5-5 ตัวอย่างแสดงขั้นตอนการโหลดค่าจากการ Post Back
จากภาพที่ 5-5 มีขั้นตอนการโหลดค่าจากการ Post Back ดังนี้
1.       ไคลเอนต์ร้องขอไฟล์เว็บฟอร์ม ซึ่งบรรจุคอนโทรล Textbox เพื่อให้กรอกข้อความ และคอนโทรล Button ซึ่งเป็นปุ่มที่ทำให้เกิดการ Post Back ไปที่เซิร์ฟเวอร์ โดยไม่มีส่วนของโค้ดที่แก้ไขค่าในคอนโทรล TextBox เลย
2.       เมื่อการ Post Back มาถึงที่เว็บเซิร์ฟเวอร์ เว็บฟอร์มจะถูกรันขึ้นมา และเมื่อถึงขั้นตอนการโหลด Post Back Data เว็บฟอร์มตรวจดูว่ามีคอนโทรลตัวใดที่ทำการอิมพลีเมนต์อินเตอร์เฟส IPostBackDataHandler บ้าง ซึ่งในที่นี้มีเพียงคอนโทรล TextBox เท่านั้น จากนั้นเว็บฟอร์มจะทำการอ่านจาก HTTP POST Headers เฉพาะที่เป็นของ TextBox แล้วนำค่าที่ได้ไปกำหนดให้กับพรอบเพอตี้ Text ซึ่งในที่นี้ก็คือคำว่า “Hello World”
3.       เมื่อรันเว็บฟอร์มครบทุกขั้นตอนแล้ว ก็จะส่งผลลัพธ์คืนกลับไปที่ไคลเอนต์ ที่ไคลเอนต์จะเห็นว่าค่าใน TextBox นี้ จะพบคำว่า “Hello World” เหมือนกับสถานะตอนที่มีการ Post Back ไปที่เว็บเซิร์ฟเวอร์
เพิ่มเติม สำหรับคอนโทรลที่มีการอิมพลีเมนต์อินเตอร์เฟส IPostBackDataHandler มักจะเป็นคอนโทรลที่เราสามารถกรอกค่า หรือแก้ไขค่าได้จากฝั่งไคลเอนต์ เช่น คอนโทรล TextBox คอนโทรล DropDownList สำหรับคอนโทรลเหล่านี้ แม้ว่าเราจะกำหนดพรอบเพอตี้ EnableViewState ให้เป็นเท็จแล้วก็ตาม คอนโทรลเหล่านี้ก็ยังสามารถจำค่าที่กำหนดจากทางฝั่งไคลเอนต์ได้ เพราะคอนโทรลเหล่านี้โหลดค่าจาก Post Back มาใช้
ขั้นตอนที่ 5 Load
เมธอดนี้เป็นของเว็บฟอร์ม ซึ่งนักพัฒนาเว็บจะรู้จักเป็นอย่างดี เหตุการณ์นี้ตรงกับเหตุการณ์ในโพรซีเยอร์ Page_Load ขั้นตอนนี้จะถูกเรียกทั้งตอนที่มีการ Post Back และไม่มีการ Post Back

ขั้นตอนที่ 6 Raise Post Back Event

เป็นเหตุการณ์ที่เกิดกับคอนโทรลที่มีความสามารถในการ Post Back ได้เช่น เหตุการณ์ Click ของ Button เหตุการณ์ TextChanged ของคอนโทรล TextBox คอนโทรลที่สามารถสร้างการ Post Back ได้นั้นต้องมีการอิมพลีเมนต์อินเตอร์เฟส IPostBackDataHandler ที่เราได้รู้จักกันไปแล้ว

ขั้นตอนที่ 7 Save View State

ขั้นตอนนี้เว็บฟอร์มจะเรียกเมธอด SaveViewState ของคอนโทรลแต่ละตัวที่อยู่ภายใต้เว็บฟอร์มตามลำดับชั้น เพื่อทำการบันทึกสถานะของคอนโทรลล่าสุดที่อาจมีการการเปลี่ยนแปลงไป เนื่องจากขั้นตอนก่อนหน้านี้ ผลของการบันทึกนี้จะถูกเก็บอยู่ในรูปตัวหนังสือที่เข้ารหัสแบบ Base-64 แล้วเก็บใน Hidden Field ที่จะถูกสร้างในขั้นตอนถัดไป

ขั้นตอนที่ 8 Render

ขั้นตอนนี้ เว็บฟอร์มจะทำการแปลงข้อมูลในขั้นตอนที่ผ่านมาออกมาในรูปภาษา HTML เพื่อส่งต่อให้กับไคลเอนต์ ในขั้นตอนนี้เว็บฟอร์มจะเรียกเมธอด RenderControl ของคอนโทรลแต่ละตัวที่อยู่ภายใต้เว็บฟอร์มตามลำดับชั้น สำหรับ
ขั้นตอนทั้ง 8 ที่กล่าวมานี้ เป็นขั้นตอนที่สำคัญที่มีความเกี่ยวข้องกับ View State ซึ่งได้ละขั้นตอน PreInit ขั้นตอนPreRender และขั้นตอน Unload ไว้

ที่มา http://www.aspnetthai.com