Comment

คือข้อความที่ถูกแทรกเข้าไปในโปรแกรม เพื่ออธิบายให้ผู้อ่านสามารถเข้าใจโปรแกรมนั้นได้ง่ายขึ้น หรือเพื่อบันทึกข้อมูลที่เกี่ยวข้องกับโปรแกรมนั้น ข้อความที่เป็น comment จะไม่มีผลต่อการทำงานของโปรแกรม ภาษา C# มี comment อยู่ 3 แบบ

  1. เหมือนภาษา C คือ เริ่มต้นด้วย /* และจบด้วย */ แบบนี้สามารถ comment ได้หลายบรรทัด เช่น /* This is multiple
    line comment */
  2. แบบเดียวกับ C++ คือเริ่มต้นด้วย // ไปจนจบบรรทัดนั้น โดยไม่ต้องมีตัวปิด
  3. แบบที่สามขึ้นต้นด้วย /// ข้อความในนี้จะถูกนำไปทำเป็น xml documentation

Keyword

คือคำ ที่ถูกกำหนดความหมายไว้แล้ว ในภาษาส่วนใหญ่นั้น รวมทั้ง C# จะถือว่า keyword เป็น reserved word (คำสงวน) นั่นคือไม่สามารถนำไปใช้ในความหมายอื่น นั่นคือห้ามนำไปใช้ เป็นชื่อตัวแปร ชื่อฟังก์ชัน หรือชื่อคลาส ภาษา C# มี keyword ทั้งหมดดังนี้

abstractasbaseboolbreak
bytecasecatchcharchecked
classconstcontinuedecimaldefault
delegatedodoubleelseenum
eventexplicitexternfalsefinally
fixedfloatforforeachgoto
ifimplicitinintinterface
internalislocklongnamespace
newnullobjectoperatorout
overrideparamsprivateprotectedpublic
readonlyrefreturnsbytesealed
shortsizeofstackallocstaticstring
structswitchthisthrowtrue
trytypeofuintulongunchecked
unsafeushortusingvirtualvoid
volatilewhile   
C# คล้ายกับ Java ตรงที่รวมเอาคำว่า true, false และ null ซึ่งถือว่าเป็นค่าคงที่ เข้ามาเป็น keyword

Identifier

คือชื่อที่ผู้เขียนโปรแกรมตั้งขึ้นได้ อาจเป็นชื่อของคลาส ตัวแปร ฟังก์ชัน ชื่อที่ถูกต้องจะต้องไม่เป็น keyword อาจจะประกอบด้วย ตัวอักษรตัวใหญ่, ตัวเล็ก, ตัวเลข และ underscore identifier ที่ถูกต้อง เช่น ThisIsABook, num1, _x, System,Int32 โดยชื่อที่ถูกต้องห้ามขึ้นต้นด้วยตัวเลข และจะมีความยาวเท่าไรก็ได้ ภาษา C# นั้นเป็นภาษาที่ case-sensitve นั่นคือ ตัวเล็ก กับ ตัวใหญ่จะตีความไม่เหมือนกัน เช่น WriteLine กับ Writeline นั้นเป็นคนละตัวกัน

verbatim identifier
verbatim identifier คือ identifer ที่นำเอา keyword มาตั้งชื่อได้ โดยการเติมตัวอักษร @ เข้าไปข้างหน้า
example:

class @class {
    public static void @static(bool @bool) {
        if (@bool)
            System.Console.WriteLine("true");
        else
            System.Console.WriteLine("false");
    }
}

หลักการตั้งชื่อ Identifier ที่ดีคือ
  • ตั้งให้สื่อความหมาย
  • ใช้ตัวเล็กตัวใหญ่เพื่อแบ่งคำ
  • ถึงแม้ การตั้งชื่อด้วยคำเดียวกันแต่ต่างกันที่ตัวอักษรใหญ่ เล็ก ต่างกันจะทำได้ แต่เราก็ไม่ควร เนื่องจาก .NET นั้นสามารถเรียกใช้ คลาสหรือฟังก์ชันข้ามภาษากันได้ ดังนั้นภาษาที่ case-insensitive เช่น VB.NET อาจจะไม่สามารถใช้งาน identifier แบบนี้ได้

Naming Guidelines

ตัวอย่างแบบคร่าว ๆ นะครับ ที่เหลือแบบเต็ม ๆ ไปหาอ่านได้ใน .NET Framework General Reference Naming Guidelines

Capitalization Styles

Pascal Case

ตัวอักษรขึ้นต้นของทุก ๆ คำให้เป็นตัวอักษรตัวใหญ่ เช่น

WriteLine
BackColor

Camel Case

ตัวอักษรตัวแรกของ identifier เป็นตัวอักษรตัวเล็ก ต่อจากนั้นเป็นตัวใหญ่ ทุก ๆ คำ เช่น

getString
parseInt
camel case นี้เป็น style การตั้งชื่อ method(function) ในภาษา Java ใน .NET ไม่ได้ใช้ style นี้นัก

Literal

คือลำดับของตัวอักษรที่ใช้แสดงค่าคงที่ใน source code แบ่งออกเป็น

  1. 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)
    class IntegerConstant {
        public static void Main() {
            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
  2. 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
    class FloatAndDouble {
        public static void Main() {
            float floatPI = 3.1415926535897896f
            double doublePI = 3.1415926535897896d
            System.Console.WriteLine(floatPI);
            System.Console.WriteLine(doublePI);
        }
    }
    ผลลัพธ์
    3.1415927
    3.1415926535897896
  3. Boolean Literal คือค่าคงที่ความจริง (truth value) มีค่าเป็น true หรือ false
    class BooleanLiteral {
        public static void Main() {
            System.Console.WriteLine(true);
            System.Console.WriteLine(false);
            System.Console.WriteLine(1 < 2);
            System.Console.WriteLine('a' == 'b');
        }
    }
    ผลลัพธ์
    true
    false
    true
    false
  4. Character Literal คือค่าคงทีตัวอักษร
    โดยทั่วไปแล้ว จะถูกแสดงอยู่ใน single quote เช่น 'a' และ '0' หากเป็นอักษรพิเศษ เช่นพวก control character จะต้องถูกนำหน้าด้วย \ (backslash) โดยจะถูกเรียกว่า escaped character
    class EscapedCharacter {
        public static void Main() {
            System.Console.WriteLine("new line [{0}]", '\n');
            System.Console.WriteLine("tab [{0}]", '\t');
            System.Console.WriteLine("single quote [{0}]", '\'');
        }
    }
    ผลลัพธ์
    new line [
    ]
    tab [        ]
    single quote [']
    โดย C# ยังมีวิธีแสดงค่าคงที่ตัวอักษร อีกแบบหนึ่งคือ escaped sequence ของ unicode character โดยเขียน \u ตามด้วย เลขฐาน 16 จำนวน 4 หลัก
    class UnicodeCharacter{
        public static void Main() {
            System.Console.WriteLine('\u0061');
            System.Console.WriteLine("\u0048\u0065\u006c\u006c\u006f");
            System.Console.WriteLine('\u0e01');
        }
    }
    ผลลัพธ์
    a
    Hello
  5. String Literal มีรูปแบบคล้าย ๆ กับ character ต่างกันที่จะถูกแสดงอยู่ใน double quote และการจะแสดงเครื่องหมาย single quote ไม่จำเป็นต้องใช้ escaped character
    class StringLiteral{
        public static void Main() {
            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");
        }
    }
    ผลลัพธ์
    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

Operator

  1. Assignment operator ในภาษา C# นั้นก็ได้นำความคิดมาจากภาษา C นั่นคือ เครื่องหมาย = เป็น operator ที่สามารถนำมาใช้ได้ใน expression ปกติได้ เช่น x + (y = 1) นั่นคือมีการกำหนดค่า y ให้เท่ากับ 1 ก่อนแล้วจึงนำไป + กับ x
  2. Arithmetic operator แบ่งย่อยออกเป็น
    • Integer & Floating-point operator ได้แก่ +, -, *, /, %(modulus) โดยถ้า operand ทั้งสองของ operator / เป็น integer number, operator / จะถูกตีความเป็น div(หารแบบปัดเศษ) แต่ถ้ามี operand ตัวใดตัวหนึ่งเป็น floating-point number, operator / จะถูกกระทำแบบการหารปกติ
      ในภาษา C# จะเหมือนกับ Java นั่นคือ modulus operator นั้นจะสามารถใช้กับ floating-point number ได้ด้วย
      class Arithmetic{
          public static void Main() {
              System.Console.WriteLine(23 / 3);
              System.Console.WriteLine(13 % 5);
              System.Console.WriteLine(11.5 % 3.1);
          }
      }
      ผลลัพธ์
      7
      3
      2.2
    • Arithmetic assignment operator ได้แก่ +=, -=, *=, /=, %= มีไว้ช่วยเขียน ประโยค assignment ให้อ่านง่ายขึ้น เช่น x = x + 7 สามารถเขียนได้เป็น x += 7 อ่านได้ว่า เพิ่มค่า x อีก 7
    • Increment and Decrement operator ได้แก่ operator 2 ตัว คือ ++ และ -- ซึ่งเขียนได้ทั้งแบบ prefix และ postfix โดย operator นี้ เป็น operator ที่ใช้เพิ่มหรือลดค่าตัวแปรอีกทีละ 1
      โดยจุดเริ่มต้นของ operator นี้มาจากภาษา C เพราะคำสั่งประเภทนี้จะถูกแปลเป็นคำสั่ง INC, DEC ในภาษา assembly ซึ่งจะทำงานได้เร็วกว่า ADD และ SUB แต่ในการใช้งานจริงแล้ว ประโยชน์ของมันคือการที่ code อ่านง่ายขึ้น
      class IncDec {
          public static void Main() {
              int x = 0, y;
              System.Console.WriteLine(x++);
              System.Console.WriteLine(++x);
              x = 0;
              y = x++;
              System.Console.WriteLine("x = {0} y = {1}", x, y);
              x = 0;
              y = ++x;
              System.Console.WriteLine("x = {0} y = {1}", x, y);
          }
      }
      ผลลัพธ์
      0
      2
      x = 1 y = 0
      x = 1 y = 1
  3. Bitwise operator เป็น operator ที่จะกระทำกับทุก ๆ bit ของ operand ในชนิด integral type(sbyte, short, int, long, byte, ushort, uint, ulong)
    • Boolean bitwise operatorได้แก่ ~(bitwise unary NOT), &(bitwise AND), | (bitwise OR), ^(bitwise XOR), <<(shift left), >>(shift right)
    • Assignment bitwise operator เช่นเดียวกับ Arithmetic assignment operator คือนำเอา Boolean bitwise operator มารวมกับเครื่องหมาย = ได้เป็น operator ดังนี้ ~=, &=, |=, ^=, <<=, >>=
  4. Relational operator ได้แก่ ==(equal to), !=(not equal to), >(greater than), >= (greater than or equal), <(less than), <=(less than or equal) ใช้ในการเปรียบเทียบกับ operand ที่มีประเภท ตัวเลข, ตัวอักษร(char) , ข้อความ(string), bool โดยข้อมูลประเภทที่ไม่ใช่ตัวเลขนั้น จะสามารถเปรียบเทียบโดยใช้ operator == และ != ได้เท่านั้น และต้องเปรียบเทียบกับข้อมูลประเภทเดียวกันเท่านั้น
    โดยผลลัพธ์ของการเปรียบเทียบนั้นจะได้ออกมาค่า boolean(true กับ false)
  5. Logical operator เนื่องจากว่าในภาษา C# มี boolean type แล้ว ดังนั้น operator ในกลุ่มนี้ จึงสามารถกระทำกับ operand ที่เป็น boolean เท่านั้น(เช่นเดียวกับ Java)
    • Boolean Logical operator ได้แก่ &(logical AND), |(logical OR), ^(logical XOR) และ !(logical NOT) จะสังเกตได้ว่า operator เหล่านี้จะใช้เครื่องหมายเดียวกับ bitwise operator โดย compiler จะดูจาก operand ว่าเป็นชนิดใด จึงจะตัดสินใจใช้ operator ในความหมายเหล่านั้น
    • Short-Circuit Logical operatorได้แก่ &&(short-circuit AND) และ ||(short-circuit OR) ต่างกับ Boolean Logical operator ตรงที่ว่าจะหยุดคำนวณเมื่อ ผลลัพธ์ของทั้ง expression นั้นสามารถระบุค่าได้แล้ว เช่น
      class ShortCircuit{
          public static void Main() {
              int x = 0, y =0;
              System.Console.WriteLine((y != 0) && (++x >0));
              System.Console.WriteLine(x);
          }
      }
      ลองรันแล้วดูผล
      จากนั้นลองเปลี่ยนจาก && เป็น & แล้วลองรันอีกที
  6. Conditional operator จริง ๆ ไม่อยากเขียนเรื่องนี้เลยเพราะยังทำความเข้าใจกับรูปประโยคค่อนข้างยาก เอาเป็นว่ามันคือ if clause แบบใช้สัญลักษณ์ละกัน
    class ConditionalOp{
        public static void Main() {
            int x = 10, y = 5;
            System.Console.WriteLine((a > b) ? a : b);
        }
    }
    ลองรันแล้วดูผลเองละกันครับแล้วจะเข้าใจ

สงสัยจะต้องต่อตอน 2 พรุ่งนี้ล่ะครับ วันนี้ละเอียดจัด คงจบไม่ไหว

Comment

Comment:

Tweet

#28 By x (183.88.152.140|183.88.152.140) on 2015-06-07 12:12

#27 By สติ๊กเกอร์ไลน์ (183.89.83.82|183.89.83.82) on 2014-11-28 11:38

You keep it up now, <a href="http://ejczzkbts.com">undansterd?</a> Really good to know.

#26 By kwQN2vSU6 (173.9.120.74) on 2013-07-30 06:57

BS low - ratainiloty high! Really good answer!

#25 By 6GBGrzmf (188.143.232.12) on 2013-07-28 15:25

System.Console.WriteLine((a > b) ? a : b);
//
if a>b = a
else a=b

#24 By dark (110.164.102.217) on 2012-02-25 11:13

I liked this post very much as it has helped me a lot in my research and is quite interesting as well. Thank you for sharing this information with us.

#23 By Persuasive Essay Topics (119.155.7.10) on 2011-01-28 19:43

Excellent & remarkable post! I have been visiting various blogs for my term papers writing research . I have found your blog to be quite useful. Keep updating your blog with valuable information......Regards

#22 By Term Papers Writing (119.157.187.22) on 2010-09-27 14:19

<a href="http://otejwqjchhawydw.com">merchckshruaqte</a> http://ljynqggosrzmdip.com [url=http://lilbveftzmjyexg.com]vdleypudlffrgmg[/url]

#21 By xtsjaaphni (94.102.52.87) on 2010-06-14 15:38

สำหลับคนสวย อยากรู้ว่าอะไร หรือถ้างงโทรมา 0831663754embarrassed

#20 By แบงค์ (118.172.216.151) on 2010-05-27 10:16

ตอนนี้กำลังเรียนอยู่เลย ดีจัง ขอบคุณมากนะคะ


#19 By Tubtim (202.139.223.18) on 2009-12-20 11:35

กรุณาช่วยบอกโครงสร้างคำสั่ง Add ในภาษา C#ด้วยคะ

#18 By อั้ม (124.157.216.116) on 2009-11-16 17:37

ข้อดีข้อเสียอ่ะ

#17 By ืืืnn (124.121.9.124) on 2008-10-06 23:55

thank you na ka

#16 By zoya (61.90.250.14) on 2008-07-27 21:06

อ่านแล้วหนุกดี

#15 By ~ ~ aimless ~ ~ on 2008-06-26 22:52

อยากให้ช่วยตอบค่ะ
เพิ่งเริ่มเรียนก็เลยไม่ค่อยเข้าใจเท่าไหร่
มีเหรียญอยู่ 5 เหรียญ เวลากรอกตัวเลขแล้วรวมทั้งได้เป็นกี่บาท กี่สตางค์
coin1=10
coin2=5
coin3=1
coin4=0.50
coin5=0.25
ทำให้ total money bath stang
พยายามแล้วแต่ว่าแยกไม่ได้จะทำอย่างไรบาท และสตางค์จะรวมแล้วแยกกันได้ รบกวนหน่อยนะค่ะ

#14 By orathai (125.26.142.183) on 2007-08-11 20:44

#13 By (202.93.62.154) on 2006-04-03 08:58

vfxgxfgh

#12 By (202.29.6.254 /unknown) on 2005-11-17 12:36

คือได้ทำรายงาน วิชานี้(Fundamental of Microcomputer Systems (เกี่ยวกับภาษาแอสเซมบลี) ) แล้วอาจารย์ให้หา ความหมายเกี่ยวกับคำสั่ง และการทำงาน ว่าเป็นอย่างไร ก็มี : - ADD (Addition)
AND (Bitwise logical AND)
BR (Conditional Branch)
Jsr (Jump to Subroutine) , JMP (Jump)
JSRR (Jump to Subroutine , Base+Offest) , Jumpr (Jump ,
Base+Offest)
LD (Load Direct)
LDI (Load Indirect)
LDR (Load Base+Index)
LEA (Load Effective Address)
NOT (Biteise Complement)
RET (Rrturn from Subroutine)
RTI (Rrturn form Interrupt)
ST (Store Direct)
STI (Store Indirect)
STR ( Store Base+Offset)
TRAP (Operating Systems Call) มีใครพอที่จะแนะนำเว็ปหรือหนังสือเกี่ยวกับคำสั่งพวกนี้บ้างหรือเปล่าค่ะ คือหาแล้ว งง ? ค่ะ แบบว่าถ้าได้ภาษาไทยก็คงช่วยได้เยอะค่ะ แบบว่าไม่เก่งภาษาอังกฤษค่ะ ยังไงก็ส่งมาที่ sutteerak89@hotmail.com ... ขอบคุณค่ะ(ไม่รู้จะทำยังไงแล้ว ขอแบบรวดเร็วนะ )

#11 By numkang (202.44.71.5 /202.44.71.5) on 2005-10-29 17:11

เว็บของ promotech คือ www.promotech.co.th ครับ

#10 By IT HR (203.155.167.103) on 2005-08-31 17:59

ที่ promotech เราต้องการ programmer ที่ใช้ .Net ต่างๆ แล้วก็เก่งด้วย ลองเข้าไปดูถ้าสนใจก็ส่งใบสมัครมาได้ ตามเมล์ในเว็บนะคะ

#9 By M (203.155.167.103) on 2005-08-31 17:58

เราเรียนไม่รุ้เรื่องเลยทำงัยดีถึงจะเรียนเก่งล่ะ
เราไม่ไหวแล้วนิเกิดมาโง่มากเลย

#8 By น้องมลพี่น๊อต (203.172.176.66 /192.168.204.23) on 2005-06-17 10:50

#7 By น้องม (203.172.176.66 /192.168.204.23) on 2005-06-17 10:49

ตอนนี้มันเร็วๆนะครับ...





ตามไม่ทันอ่ะ

#6 By ปาม มี่ ♫ on 2005-06-15 14:09

แง แง ขอก๊อป หน่อยจิ นะ นะนะ

#5 By เฟิร์น (61.19.234.250 /192.1.1.28) on 2005-06-08 15:07

สอนละเอียดดีจังคับ
แต่โดยส่วนตัวแล้วเกลียด bitwise operation อะ ปวดหัว -*-

#4 By P.S. on 2005-06-07 09:53

ลิ่ว : ครับ ๆ ผมเบลอเอง

#3 By T!D on 2005-06-05 03:48

ตัวอย่างเรื่อง Increment and Decrement operator

ผลลัพธ์มันดูแปลกๆ นะ สองตัวแรกไม่ใช่ 0 2 เหรอ?

#2 By ลิ่ว on 2005-06-05 01:57

อ่าว กะลังอ่านเพลินๆ

#1 By zkan on 2005-06-04 21:58