Transcript pptx
C# โครงสร้างใน C# Suphot Sawattiwong [email protected] Reference: http://tidno1.exteen.com/20050604/c-tutorial-2 Comment ใน C# • คือข้ อความที่ถกู แทรกเข้ าไปในโปรแกรม เพื่ออธิบายให้ ผ้ อู ่านสามารถเข้ าใจ โปรแกรมนันได้ ้ ง่ายขึ ้น หรื อเพื่อบันทึกข้ อมูลที่เกี่ยวข้ องกับโปรแกรมนัน้ ข้ อความที่เป็ น comment จะไม่มีผลต่อการทางานของโปรแกรม ภาษา C# มี comment อยู่ 3 แบบ – เหมือนภาษา C คือ เริ่ มต้ นด้ วย /* และจบด้ วย */ แบบนี ้สามารถ comment ได้ หลายบรรทัด เช่น /* This is multiple line comment */ – แบบเดียวกับ C++ คือเริ่ มต้ นด้ วย // ไปจนจบบรรทัดนัน้ โดยไม่ต้องมีตวั ปิ ด – แบบที่สามขึ ้นต้ นด้ วย /// ข้ อความในนี ้จะถูกนาไปทาเป็ น xml documentation Keyword หรื อ Reserved word • คือคา ที่ถกู กาหนดความหมายไว้ แล้ ว ในภาษาส่วนใหญ่นนั ้ รวมทัง้ C# จะถือว่า keyword เป็ น reserved word (คาสงวน) นัน่ คือไม่สามารถนาไปใช้ ในความหมายอื่น นัน่ คือห้ ามนาไปใช้ เป็ นชื่อตัว แปร ชื่อฟั งก์ชนั หรื อชื่อคลาส • C# คล้ ายกับ Java ตรงที่รวมเอาคาว่า true, false และ null ซึง่ ถือว่าเป็ นค่าคงที่ เข้ ามาเป็ น keyword Keyword ใน C# abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long namespace new null object operator out override params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual void volatile while การตั้งชื่อ ใน C# Identifier • ชื่อที่ผ้ เู ขียนโปรแกรมตังขึ ้ ้นได้ อาจเป็ นชื่อของคลาส ตัวแปร ฟั งก์ชนั ชื่อ ที่ถกู ต้ องจะต้ องไม่เป็ น keyword อาจจะประกอบด้ วย ตัวอักษรตัว ใหญ่, ตัวเล็ก, ตัวเลข และ underscore identifier ที่ถกู ต้ อง เช่น ThisIsABook, num1, _x, System,Int32 โดยชื่อที่ ถูกต้ องห้ ามขึ ้นต้ นด้ วยตัวเลข และจะมีความยาวเท่าไรก็ได้ ภาษา C# นันเป็ ้ นภาษาที่ case-sensitve นัน่ คือ ตัวเล็ก กับ ตัวใหญ่จะ ตีความไม่เหมือนกัน เช่น WriteLine กับ Writeline นันเป็ ้ นคน ละตัวกัน หลักการตั้งชื่อ Identifier ที่ดี • ตังให้ ้ สื่อความหมาย • ใช้ ตวั เล็กตัวใหญ่เพื่อแบ่งคา • ถึงแม้ การตังชื ้ ่อด้ วยคาเดียวกันแต่ตา่ งกันที่ตวั อักษรใหญ่ เล็ก ต่างกัน จะทาได้ แต่เราก็ไม่ควร เนื่องจาก .NET นันสามารถเรี ้ ยกใช้ คลาส หรื อฟั งก์ชนั ข้ ามภาษากันได้ ดังนันภาษาที ้ ่ case-insensitive เช่น VB.NET อาจจะไม่สามารถใช้ งาน identifier แบบนี ้ได้ • ตัวอย่างแบบคร่าว ๆ นะครับ ที่เหลือแบบเต็ม ๆ ไปหาอ่านได้ ใน .NET Framework General Reference Naming Guidelines (http://msdn.microsoft.com/enus/library/xzf533w0(vs.71).aspx) Capitalization Styles • Pascal Case ตัวอักษรขึ ้นต้ นของทุก ๆ คาให้ เป็ นตัวอักษรตัวใหญ่ เช่น WriteLine BackColor • Camel Case ตัวอักษรตัวแรกของ identifier เป็ นตัวอักษรตัวเล็ก ต่อจากนันเป็ ้ น ตัวใหญ่ ทุก ๆ คา มักใช้ ในการตังชื ้ ่อ Method (function) เช่น getString parseInt Verbatim Identifier • คือ identifer ที่นาเอา keyword มาตังชื ้ ่อได้ โดยการเติม ตัวอักษร @ เข้ าไปข้ างหน้ า เช่น @bool, @int, @loop • ไม่แนะนาให้ ใช้ และควรหลีกเลี่ยงการใช้ keyword ในการใช้ ดีกว่า Literal • คือลาดับของตัวอักษรที่ใช้ แสดงค่าคงที่ใน source code แบ่ง ออกเป็ น – Integral literal – Floating-point Literal – Boolean Literal – Character Literal – String Literal Integral literal • คือค่าคงที่ของเลขจานวนเต็ม เขียนได้ 3 แบบ – ตัวเลขล้ วน ๆ ที่ไม่ขึ ้นต้ นด้ วยเลข 0 จะถูกตีความเป็ นเลขฐาน 10 – ตัวเลข 0-7 ที่ขึ ้นต้ นด้ วยเลข 0 จะถูกตีความเป็ นเลขฐาน 8 เช่น 0400 คือ 256 ใน เลขฐาน 10 – ตัวเลข 0-9 และอักษร A-F(หรื อ a-f) ที่ขึ ้นต้ นด้ วย 0X(หรื อ 0x) จะถูกตีความ เป็ นเลขฐาน 16 เช่น 0X7F คือ 127 ในเลขฐาน 10 • โดย default แล้ ว Integral literal จะถูกเก็บไว้ ในหน่วยความจา ขนาด 32-bit(ค่าคงที่ชนิด int) หากเราต้ องการใช้ ตวั เลขที่มากกว่านันคื ้ อ ตังแต่ ้ 231 จนถึง 263 - 1 จะต้ องมีตวั อักษร l(แอลเล็ก) หรื อ L ต่อท้ ายเลข นัน้ เพื่อบอก compiler ว่าเป็ นเลข long integer(ค่าคงที่ชนิด long) ตัวอย่าง Integral literal System.Console.WriteLine(20); System.Console.WriteLine(020); System.Console.WriteLine(0x20); System.Console.WriteLine(12345678901234); System.Console.WriteLine(12345678901234L); 20 16 32 1942892530 12345678901234 Floating-point Literal • คือค่าคงที่เลขทศนิยม เขียนได้ สองแบบ – แบบมาตรฐาน เช่น 17.357810 – แบบวิทยาศาสตร์ เช่น 2.997E8(2.997 * 108) หรื อ 9.1093897e-31 (จะ ใช้ e หรื อ E ก็ได้ ) • ในภาษา C# มี floating-point สองแบบคือแบบ 32-bit(ค่าคงที่ ชนิด float) ซึง่ จะมีความละเอียดของทศนิยมประมาณ 7 หลัก และแบบ 64-bit(ค่าคงที่ประเภท double) โดย default ถ้ าเราไม่ระบุตวั อักษร ต่อท้ าย compiler จะตีความเป็ น ค่าคงที่ชนิด double ซึง่ เราควรจะ กาหนดไปให้ ชดั เจนว่าเป็ นตัวแปรขนาดใดโดยการเติมตัวอักษร f(หรื อ F) เพื่อบอกว่ามีขนาด 32-bit หรื อ d(หรื อ D) เพื่อบอกว่ามีขนาด 64-bit ตัวอย่าง Floating-point Literal float floatPI = 3.1415926535897896f double doublePI = 3.1415926535897896d System.Console.WriteLine(floatPI); System.Console.WriteLine(doublePI); 3.1415927 3.1415926535897896 Boolean Literal • คือค่าคงที่ความจริง (truth value) มีคา่ เป็ น true หรื อ false System.Console.WriteLine(true); System.Console.WriteLine(false); System.Console.WriteLine(1 < 2); System.Console.WriteLine('a' == 'b'); true false true false Character Literal • คือค่าคงทีตวั อักษร โดยทัว่ ไปแล้ ว จะถูกแสดงอยูใ่ น single quote เช่น 'a' และ '0' หากเป็ นอักษรพิเศษ เช่นพวก control character จะต้ องถูกนาหน้ าด้ วย \ (backslash) โดยจะถูก เรี ยกว่า escaped character System.Console.WriteLine("new line [{0}]", '\n'); System.Console.WriteLine("tab [{0}]", '\t'); System.Console.WriteLine("single quote [{0}]", '\''); new line [ ] tab [ ] single quote ['] Character Literal(ต่อ) • โดย C# ยังมีวิธีแสดงค่าคงที่ตวั อักษร อีกแบบหนึง่ คือ escaped sequence ของ unicode character โดยเขียน \u ตามด้ วย เลขฐาน 16 จานวน 4 หลัก System.Console.WriteLine('\u0061'); System.Console.WriteLine("\u0048\u0065\u006c\u006c\u006f"); System.Console.WriteLine('\u0e01'); a Hello ก String Literal • มีรูปแบบคล้ าย ๆ กับ character ต่างกันที่จะถูกแสดงอยู่ใน double quote และการจะแสดงเครื่ องหมาย single quote ไม่จาเป็ นต้ องใช้ escaped character System.Console.WriteLine("character is 'a', 'b', ..., 'z'"); System.Console.WriteLine("hello, world"); System.Console.WriteLine(@"hello, world"); System.Console.WriteLine("hello \t world"); System.Console.WriteLine(@"hello \t world"); System.Console.WriteLine("Joe said \"Hello\" to me"); System.Console.WriteLine(@"Joe said ""Hello"" to me";); System.Console.WriteLine("\\\\server\\share\\file.txt"); System.Console.WriteLine(@"\\server\share\file.txt"); System.Console.WriteLine("C:\\WINDOWS\\SYSTEM32\\edlin.exe"); System.Console.WriteLine(@"C:\WINDOWS\SYSTEM32\edlin.exe"); ผลลัพธ์จากตัวอย่าง String Literal character is 'a', 'b', ..., 'z' hello, world hello, world hello world hello \t world Joe said "Hello" to me Joe said "Hello" to me \\server\share\file.txt \\server\share\file.txt C:\WINDOWS\SYSTEM32\edlin.exe C:\WINDOWS\SYSTEM32\edlin.exe Primitive Data Types Data type Description Aliased From sbyte 1-byte signed integer เก็บค่าตังแต่ ้ -128 ถึง 127 public struct System.SByte byte 1-byte unsigned integer เก็บค่าตังแต่ ้ 0 ถึง 255 public struct System.Byte short 2-byte signed integer เก็บค่าตังแต่ ้ -32768(-215) ถึง 32767(215 - 1) public struct System.Int16 ushort 2-byte unsigned integer เก็บค่าตังแต่ ้ 0 ถึง 65536(216 - 1) public struct System.UInt16 int 4-byte signed integer เก็บค่าตังแต่ ้ -2,147,483,648(-231) ถึง 2,147,483,647(231 - 1) public struct System.Int32 uint 4-byte unsigned integer เก็บค่าตังแต่ ้ 0 ถึง 4,294,967,295(232 - 1) public struct System.UInt32 long ulong float double 8-byte signed integer เก็บค่าตังแต่ ้ -9,223,372,036,854,775,808(63 63 2 ) ถึง -9,223,372,036,854,775,807(2 - 1) 8-byte signed integer เก็บค่าตังแต่ ้ 0 ถึง 64 18,446,744,073,709,551,616(2 - 1) 4-byte floating-point number เก็บค่าในช่วง ±(1.401298E453.4028235E+38 ถึง 3.4028235E+38) 8-byte floating-point number เก็บค่าในช่วง ±(4.94065645841246544E-324 ถึง 1.79769313486231570E+308) public struct System.Int64 public struct System.UInt64 public struct System.Single public struct System.Double bool Boolean type เก็บค่า true และ false public struct System.Boolean char 2-byte Unicode character public struct System.Char Primitive Data Types (ต่อ) • type wrapper ของ primitive type เหล่านี ้(ไม่วา่ int หรื อ Int32 ก็เป็ นตัวเดียวกัน สามารถเขียนแทนกันได้ ทกุ ตาแหน่ง โดย ทุกตัวนี ้ถูก define ไว้ ใน System.ValueType ทังหมด ้ • เนื่องจาก ทุก primitive type นี ้เป็ น struct หมดเลย ดังนันเรา ้ จะไม่สามารถทาให้ type เหล่านี ้รับค่า null ได้ เลย หากต้ องการให้ ทาได้ ต้องใช้ Nullable type ใน .NET 2.0 Data type อื่น ๆ ที่ใช้บ่อย Data type Description Aliased From floating-point แบบละเอียด เก็บค่าตั ้งแต่ ((-296 ถึง decimal 296)/ 10(0 ถึง 28)) เวลาจะระบุว่า literal ใด ๆ ว่าเป็ น public struct System.Decimal decimal ให้ ใช้ ตัว M หรื อ m ต่อท้ าย เช่น 0.001m เก็บค่าข้ อมูล วันที่และเวลาในช่วง 00:00:00 1 มกราคม 0001 จนถึง 23:59:59 31 ธันวาคม 9999 โดยที่มีความ DateTime ละเอียดในการเก็บ 0.1 millisecond(100 public struct System.DateTime nanosecond) string ลาดับของ character ที่ถกู encode แบบ UTF-16 public class System.String เป็ น type ที่ใหญ่ที่สดุ ในนี ้ คือทุก ๆ type สามารถ เปลี่ยนมาเป็ น type นี ้ได้ หมด (คล้ าย ๆ กับ variant ใน object VB® ล่ะครับ (แต่ประหยัด mem และ พลังงานในการใช้ public class System.Object กว่าเยอะ)