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
กว่าเยอะ)