Top Banner
Narisa.com Microsoft Technology Microsoft .NET Developer Page 1 of 2 C# Beginner To Expert Started by Miolynet , Sep 08 2010 10:03 AM Miolynet สวัสด คร บชาว Narisa กๆท าน พอด ผมก าลังเข ยนบทความเก ยวกับ C# ตั งแต เร มต นไปจนถ งผ เช ยวชาญอย ในเว บบอร ดของ "มหาว ทยาลัยขอนแก " แล วเน องจากว าผมได เคยอาศัยบทความต างๆของหลายๆท านท ได โพสต ไว ใน Narisa แห งน อย พอ สมควร แล วผมเห นว าบทความท ผมก าลังเข ยนอย เป นประโยชน อเหล programmer วยกัน ผมจ งขอน าบทความของผมมา ฝากไว บอร narisa เพ อให เพ อนๆได แบ งปันความร ให งกันและกันครับ C# Beginner To Expert " เน องจากผมได รับความร ในด าน programming เป นครั งแรกจาก "มหาว ทยาล ัยขอนแก " งในสม ัยน ั นภาษา java หร c# ออะไรผมก ย ังไม เข าใจ จนกระทั งผมได โอกาสเล าเร ยนจากอาจารย หลายๆท านท ได าการถ ายทอดความร ในด าน programming ให ก ับต ัวผมจ งท าให ผมในว ันน ได ผมร กขอบคณอาจารย กๆท านท ได พยายามถ ายทอด ชาความร ให ก ับต ัวผมเป นอย างย ง และในวันน ผมก ได นน องท ผมรักหลายกหลายคนหลากหลายร น ผมจ งอยากมอบ ความร ผมม ายทอดให กับร นน องผมบ างด ั งเช นก ับอาจารย ได ายทอดความร ให ก ับต ัวผมคร ับ " เร องราวท ผมจะน ามาถ ายทอดน จะเป นเน อหาเก ยวกับ programming ในภาษา C# ตามหัวเร องน ตั งแต ขั นพ นฐานไปจนถ งขั นผ านาญการกันเลยท เด ยวครับ Quote [อนาคตจะท าสารบัญไว ในส วนน ให กๆท านสามารถด บทความ update ได นะครับ] **หากม การเข ยนผ ดตกหล น หร อ ให อม ลความร ด ก ขออภัย ณ ท วย และจะเป นการด หากท านท พบเจอส งเหล านั นได วย แนะน าตักเต อนผมด วย ขอบค ณครับ ** เน อหาบางส วนผมไม ได อธ บายทั งหมด หากท านต องการค าอธ บายกร ณาโพสต อความไว นะครับ ** (เน อหาในบทความทั งหมดน กเข ยนใน IDE VisualStudio 2010 C# .NET V.4) Edited by Miolynet, 08 September 2010 10:06 AM. Posted 08 September 2010 10:03 AM Miolynet C# Intro Microsoft’s documentation Quote “C# is a simple, modern, Object Oriented, and typesafe programming language derived from C and C++… C# aims to combine the high productivity of Visual Basic and the raw power of C++.” ในโลกของ Programming นั นม เส นทางหลัก 2 ทาง Procedural Programming งให ความส าคัญกับขั นตอนกระบวนการท า โดยแบ งโปรแกรมออกเป นส วนๆตามล าดับขั ตอนการท างาน (wiki) Objectoriented programming (OOP) แนวค ดการเข ยนโปรแกรมเช งวัตถ นั นให ความส าคัญกับ ข อม (data) และ พฤต กรรม(behavior) ของวัตถ และความสัมพันธ กันระหว างวัตถ (wiki) วนภาษา C# เป นภาษาท รองรับ OOP (Objectoriented programming) เต มร ปแบบ Posted 08 September 2010 10:04 AM
16

C# Beginner to Expert - Microsoft .NET Developer - Narisa

Dec 02, 2015

Download

Documents

alovana

Credit : www.narisa.com
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: C# Beginner to Expert - Microsoft .NET Developer - Narisa

Narisa.com → Microsoft Technology → Microsoft .NET Developer

Page 1 of 2

C# Beginner To ExpertStarted by Miolynet , Sep 08 2010 10:03 AM

Miolynet

สวสดครบชาว Narisa ทกๆทาน พอดผมกาลงเขยนบทความเก耀幊ยวกบ C# ต䳩งแตเร耀幊มตนไปจนถงผเช耀幊ยวชาญอยในเวบบอรดของ"มหาวทยาลยขอนแกน" แลวเน耀幊องจากวาผมไดเคยอาศยบทความตางๆของหลายๆทานท耀幊ไดโพสตไวใน Narisa แหงน䳩อยพอสมควร แลวผมเหนวาบทความท耀幊ผมกาลงเขยนอยน䳩เปนประโยชนตอเหลา programmer ดวยกน ผมจงขอนาบทความของผมมาฝากไวท耀幊บอรด narisa เพ耀幊อใหเพ耀幊อนๆไดแบงปนความรใหซ耀幊งกนและกนครบ

C# Beginner To Expert " เน耀幊องจากผมไดรบความรในดาน programming เปนคร 攀งแรกจาก "มหาวทยาลยขอนแกน" ซ耀幊งในสมยน 攀นภาษา javaหรอ c# คออะไรผมกยงไมเขาใจ จนกระท耀幊งผมไดมโอกาสเลาเรยนจากอาจารยหลายๆทานท耀幊ไดทาการถายทอดความรในดาน programming ใหกบตวผมจงทาใหมผมในวนน攀ได ผมรสกขอบคณอาจารยทกๆทานท耀幊ไดพยายามถายทอดวชาความรใหกบตวผมเปนอยางย耀幊ง และในวนน攀ผมกไดมรนนองท耀幊ผมรกหลายกหลายคน หลากหลายรน ผมจงอยากมอบความรท耀幊ผมมถายทอดใหกบรนนองผมบางด耀幊งเชนกบอาจารยท耀幊ไดถายทอดความรใหกบตวผมครบ "

เร耀幊องราวท耀幊ผมจะนามาถายทอดน䳩จะเปนเน䳩อหาเก耀幊ยวกบ programming ในภาษา C# ตามหวเร耀幊องน䳩 ต䳩งแตข䳩นพ䳩นฐานไปจนถงข䳩นผชานาญการกนเลยทเดยวครบ

Quote

[อนาคตจะทาสารบญไวในสวนน䳩ใหทกๆทานสามารถดบทความ update ไดนะครบ]

**หากมการเขยนผดตกหลน หรอ ใหขอมลความรผด กขออภย ณ ท耀幊น䳩ดวย และจะเปนการดหากทานท耀幊พบเจอส耀幊งเหลาน䳩นไดชวยแนะนาตกเตอนผมดวย ขอบคณครบ** เน䳩อหาบางสวนผมไมไดอธบายท䳩งหมด หากทานตองการคาอธบายกรณาโพสตขอความไวนะครบ **(เน䳩อหาในบทความท䳩งหมดน䳩ถกเขยนใน IDE VisualStudio 2010 C# .NET V.4)

Edited by Miolynet, 08 September 2010 ­ 10:06 AM.

Posted 08 September 2010 ­ 10:03 AM

Miolynet

C# IntroMicrosoft’s documentation

Quote

“C# is a simple, modern, Object Oriented, and typesafe programming language derived from C and

C++… C# aims to combine the high productivity of Visual Basic and the raw power of C++.”

ในโลกของ Programming น䳩นมเสนทางหลก 2 ทาง­ Procedural Programming ซ耀幊งใหความสาคญกบข䳩นตอนกระบวนการท耀幊ทา โดยแบงโปรแกรมออกเปนสวนๆตามลาดบข䳩นตอนการทางาน (wiki)­ Object­oriented programming (OOP) แนวคดการเขยนโปรแกรมเชงวตถน䳩นใหความสาคญกบ ขอมล(data) และพฤตกรรม(behavior) ของวตถ และความสมพนธกนระหวางวตถ (wiki)

สวนภาษา C# เปนภาษาท耀幊รองรบ OOP (Object­oriented programming) เตมรปแบบ

Posted 08 September 2010 ­ 10:04 AM

Page 2: C# Beginner to Expert - Microsoft .NET Developer - Narisa

Encapsulation,Inheritance,Polymorphism<ในเน䳩อหาสวน OOP จะกลาวถงภายหลง> แตกไมไดหมายความวาภาษา C# จะไมสามารถทางานแบบ Procedural Programming ได หากนกพฒนาไมไดเรยนรเคร耀幊องมอท耀幊เปนสาหรบ OOP(Encapsulation,Inheritance,Polymorphism) กยอมเปนการนาภาษา C# มาเขยนแบบProcedural เชนเดม

C# Programming basic­ ไฟลของภาษา C# น䳩นจะมนามสกลเปน ".cs"­ ภาษา C# ถกใชงานเร耀幊มตนท耀幊 "Main() Method (อานวา เมธอต)"­ main method จะม Return type เปน void หรอ int และเปน static method << อานรายละเอยดไดในเน䳩อหาของ Method >>­ main method จะม parameter หรอไมมกได หากมจะตองเปน Array ของ string ซ耀幊งจะถกกาหนดคาใน command line

ตวอยางของ code เร耀幊มตนในภาษา C#using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace ConsoleApplication1 class Program static void Main(string[] args)

ใน code ตวอยางจะมสวนประกอบหลก 4 สวนดงน䳩 << สวนตางๆจะคอยอธบายในบทถดไป >>

1.Reference

using System;using System.Collections.Generic;using System.Linq;using System.Text;

2.Namespace

namespace ConsoleApplication1

3.Class

class Program

4.Method

static void Main(string[] args)

ในสวนของ Method main น䳩เราจะทาการเขยน code ตางๆของภาาษา C# ไวในน䳩ครบ

** เน䳩อหาบางสวนผมไมไดอธบายท䳩งหมด หากทานตองการคาอธบายกรณาโพสตขอความไวนะครบ **(เน䳩อหาในบทความท䳩งหมดน䳩ถกเขยนใน IDE VisualStudio 2010 C# .NET V.4)

Edited by Miolynet, 08 September 2010 ­ 10:08 AM.

Miolynet

.NET Basic Data types

Data type : คอ ช耀幊อเรยกสาหรบไวนยามส耀幊งของตางๆในภาษา C# (ใหจางายๆแบบน䳩ไปกอน) เชน "สตวปก" เราใหคานยามของคาวาสตวปกคอ เปนส耀幊งมชวตท耀幊มปก ดงน䳩นทกส耀幊งท耀幊เราบอกวามนเปนสตวปก จะตองมปก เม耀幊อเราไปคยกบคนอ耀幊นแลวเราบอกวาไกเปนสตวปก ผฟงจะเขาใจไดในทนทวาไกมปกแนนอน เพราะ นยามของคาวาสตวปก คอ "มนจะตองมปก" เชนกน ในภาษา C# กมคานยามเพ耀幊อใหเหลา programmer เขาใจตรงกนกบส耀幊งท耀幊คอมพวเตอรเขาใจ จะไดคยกนไดรเร耀幊อง ซ耀幊ง computer มนยามหรอ datatype ตางๆดงน䳩

(ไมขออธบาย data type ทกตวของ .net นะครบ)

Posted 08 September 2010 ­ 10:06 AM

Page 3: C# Beginner to Expert - Microsoft .NET Developer - Narisa

กลมของตวอกษร .NET typeSystem.String­ string (อานวา สตง) : ส耀幊งใดท耀幊ถกนยามวาเปน string ส耀幊งน䳩นจะตองเปนตวอกษรและอยภายใตอกขระ "" (double quoteดบเบลโคท) เทาน䳩น เชน "ABCDabcd"

"12345678"

"ABC15D9"

"+­*/"

"A5­C63*/C"ท䳩งหมดน䳩เปน string เน耀幊องจากเปนตวอกษรท耀幊อยภายใตขระ "" (double quote)

กลมของตวเลข.NET tpye System.Int32­ int (อานวา อ攀น ยอมาจากคาวา Integer) : ส耀幊งใดท耀幊ถกนยามวาเปน int ส耀幊งน䳩นจะตองเปนตวเลขจานวณเตมเทาน䳩น เชน 123

75586325

0

­8563

.NET tpye System.Double­ double (อานวา ดบเบล) : ส耀幊งใดท耀幊ถกนยามวาเปน double ส耀幊งน䳩นจะตองเปนตวเลขจานวณเตมหรอทศนยมเทาน䳩น เชน 123

755.86325

0.123

­8563.444

Variable Declaration การสรางตวแปรเปนการนาคานยาม (data type) มาใชงาน ซ耀幊ง c# มมาตรฐานในการสรางตวแปรดงน䳩

<Data Type> <Variable Name>;

<Data Type> : ส耀幊งท耀幊เราจะนยามตวแปรของเรา<Variable Name> : ช耀幊อตวแปรท耀幊เราตองการ

เชน ผมตองการตวแปรช耀幊อ test และตองการใหตวแปรตวน䳩เปนตวเลขจานวณเตมจะไดวาint test;

** ภาษา C# ทกๆการทางานจะตองจบดวย " ; " (Semicolon อานวา เซมโคลอน) มไวเพ耀幊อบอกวา statement น䳩ไดจบลงแลว

** เน䳩อหาบางสวนผมไมไดอธบายท䳩งหมด หากทานตองการคาอธบายกรณาโพสตขอความไวนะครบ **(เน䳩อหาในบทความท䳩งหมดน䳩ถกเขยนใน IDE VisualStudio 2010 C# .NET V.4)

Edited by Miolynet, 08 September 2010 ­ 10:07 AM.

Miolynet

Everything is an object อยางท耀幊ผมไดบอกไวต䳩งแตข䳩นตนแลววาภาษา C# น䳩นเปนภาษาท耀幊รองรบการเขยนแบบ OOP ชนดเตมรปแบบ ดงน䳩นทกส耀幊งทกอยางของภาษา C# น䳩นเปน Object ท䳩งหมด <<ซ耀幊งจะกลาวเร耀幊องน䳩ในบทของ OOP อกทหน耀幊งอยางละเอยด>>

System.Object ม method ท耀幊เปน virtual ใหเราสามารถทาการ override ไดเชน­ ToString() : เปนการแปลงตวแปร (variable) ของเราใหกลายเปน string­ <<เน䳩อหาสวนน䳩จะกลาวในสวนของ OOP>>

.NET Data Type categories ในตว .net น䳩จะม data type หลกท䳩งหมด 3 ชนดดงน䳩

[Value types] คาของมนจะถกเกบไวภายใน stack และส耀幊งท耀幊เกบไวคอคาของมนจรงๆ วธการกาหนดคาใหกบ variable อ耀幊นจะเปนวธการ copy ไป ­ double,float,int,short,decimal,.....,Enums,Structs

Posted 08 September 2010 ­ 10:09 AM

Page 4: C# Beginner to Expert - Microsoft .NET Developer - Narisa

­ Derived จาก System.ValueType ซ耀幊งเปน sealed (ไมสามารถนาไปเขยนคลาสลกของมนได) ­ สามารถ implement Interfaces ได ­ มคาเร耀幊มตนเปน ศนย

[Reference types] คาของมนจะถกเกบไวใน GC heap เวลาท耀幊ใชในการกาหนดคาใหกบ variable อ耀幊นๆจะเปนการช䳩ตาแหนงของขอมลท耀幊อยภายใน heap (จงถกเรยกวา reference type) ­ Classes,Interfaces,Arrays,Delegates,string

[ Pointers] ­ pointer <<ตองใชใน mode unsafe เทาน䳩น ดงน䳩นผมจะขอไมเอยถง pointer>>

ตวอยางของ Reference type กบ Value type

Example Reference

using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace ConsoleApplication1 class Program class ReferenceType public int Value get; set;

static void Main(string[] args) ReferenceType ref1 = new ReferenceType(); ReferenceType ref2 = ref1;

ref1.Value = 999;

Console.WriteLine(ref1.Value); Console.WriteLine(ref2.Value);

เปนการสราง inner class ช耀幊อ ReferenceType ข䳩นมาและทาการสราง variable 2 ตวช耀幊อ ref1,ref2 ซ耀幊งท䳩ง 2 ตวน䳩เปน (Referencetype)

ตอมาทาการกาหนดคาใหกบ ref2 = ref1 ในเชง reference type หมายถงให variable ref2 ไปช䳩ตาแหนงเดยวกนกบ ref1 ใน heapตอมาทาการกาหนดคา ref1.Value ใหมคาเปน 999ตอมาทาการแสดงผลของ ref1.Value และ ref2.Value ซ耀幊งจะไดผลลพทดงน䳩

Quote

[Output]999

999

** แมวาเราจะไมไดกาหนดคาใหกบ ref2.Value แตมนกมคา 999 เหมอน ref1 เน耀幊องจาก ref1 และ ref2 เปน reference type มนจงอางองขอมล ref2 เหมอน ref1 เชนกน

Example Value type

using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace ConsoleApplication1 class Program static void Main(string[] args) int value1 = 0; int value2 = value1;

value1 = 999;

Console.WriteLine(value1); Console.WriteLine(value2);

Page 5: C# Beginner to Expert - Microsoft .NET Developer - Narisa

สราง value type 2 ตวช耀幊อ value1,value2 และทาการกาหนดคาให value2 = value1ตอมาทาการแกไขคาให value1 = 999ตอมาทาการแสดงผล value1,value2

Quote

[Output]999

0

** เน耀幊องจาก value1,value2 มนเปน value type ดงน䳩นมนจะเปนการ copy คาใหกบ value2 เฉยๆ เม耀幊อมการเปล耀幊ยนแปลงคาของvalue1 คาของ value2 กจะไมมการเปล耀幊ยนแปลงตาม

** เน䳩อหาบางสวนผมไมไดอธบายท䳩งหมด หากทานตองการคาอธบายกรณาโพสตขอความไวนะครบ **(เน䳩อหาในบทความท䳩งหมดน䳩ถกเขยนใน IDE VisualStudio 2010 C# .NET V.4)

Edited by Miolynet, 08 September 2010 ­ 10:10 AM.

Miolynet

Boxing And Unboxing

เน耀幊องจากตวอยางเร耀幊อง Value type กบ Reference type ทาใหเราทราบวา C# มการทางานคราวๆกบเจา Data type อยางไร ความน䳩เราจะถกถงวธการแปลง value type ใหเปน reference type และการแปลง reference type กลบมาเปน value type ดวยหลกการท耀幊เรยกวา Boxing กบ Unboxing

Quote

Data type ทกๆชนดท耀幊เราเขยนในภาษา C# น䳩นมตนกาเหนดมาจาก System.Object ดงน䳩นเราจงสามารถแปลงทกๆส耀幊งใน C# ใหมาอยในรปของObject ได

Boxing (บอกซง) <<ไมใชการตอยมวย>>เปนกลไกหน耀幊งท耀幊ทาหนาท耀幊แปลง Value type เปน Reference type โดยการนา Object มาเกบคาท耀幊ตองการแปลงไปเปนreference type

int valueType = 999;object referenceType = valueType;

เปนการสรางตวแปรช耀幊อ valueType ซ耀幊งมคาเปน 999 (คาของตวแปรน䳩จะถกเกบไวใน stack ด耀幊งท耀幊เคยไดกลาวไป)ตอมาทาการสรางตวแปรช耀幊อ referenceType มาเกบคาของตวแปร valueType ของเราไป ซ耀幊ง referenceType ม data type เปนobject (คาของตวแปรน䳩จะถกนาไปเกบไวใน Heap ดงน䳩นจงเปนการแปลงคาจาก value type เปน reference type)

UnBoxing (อนบอกซง)เปนการแปลงคาจาก Reference type ใหกลายมาเปน Value type

int valueType = 999;object referenceType = valueType;

int changeToValueType = (int)referenceType;

โคทท耀幊เพ耀幊มเขามาint changeToValueType = (int)referenceType;

เปนการแปลงคา Reference type ใหกลบมาอยในรปแบบของ value type ดวยการ catch เปน (int) ใหกบตวแปรท耀幊ช耀幊อchangeToValueType ซ耀幊งเปน value type

** เน䳩อหาบางสวนผมไมไดอธบายท䳩งหมด หากทานตองการคาอธบายกรณาโพสตขอความไวนะครบ **(เน䳩อหาในบทความท䳩งหมดน䳩ถกเขยนใน IDE VisualStudio 2010 C# .NET V.4)

Edited by Miolynet, 08 September 2010 ­ 10:11 AM.

Posted 08 September 2010 ­ 10:11 AM

Page 6: C# Beginner to Expert - Microsoft .NET Developer - Narisa

Miolynet

System.Object Class member

ในบทความท耀幊แลวผมไดกลาวอางถง System.Object ซ耀幊งเปนตนแบบของทกๆอยางท耀幊อยภายใน C# ไววา

Quote

Data type ทกๆชนดท耀幊เราเขยนในภาษา C# น䳩นมตนกาเหนดมาจาก System.Object ดงน䳩นเราจงสามารถแปลงทกๆส耀幊งใน C# ใหมาอยในรปของObject ได

คราวน䳩ผมจะนาสมาชกหลกของ System.Object มาใหดวามอะไรอยภายในน䳩นบาง

public virtual bool Equals(object o);public static bool Equals(object o1, object o2);public static bool ReferenceEquals(object o1,object o2);

public virtual int GetHashCode();public Type GetType();public virtual string ToString();~Object(); //(Object.Finalize())protected object MemberwiseClone();

สาเหตท耀幊ผมนาสมาชกของ System.Object มาใหดเน耀幊องจากมนเปนตนแบบของทกๆอยางในภาษา C# ดงน䳩นหมายความวา การท耀幊เราสรางตวแปร (variable) ข䳩นมาภายในภาษา C# น䳩น ตวแปรท耀幊เราสรางข䳩นมาจะมคณสมบตท耀幊เหมอนกบ System.Object ดวยเชนกน

(ไมขออธบายทก method)

Equals(object o1, object o2) เปนการตรวจความเทากน หากเทากนจะไดคากลบมาเปน true, หากไมเทากนจะไดกลบมาเปน false­>หากสง value type น䳩นหมายถง คาของมนเทากนหรอไม­> หากสง reference type จะเปนการตรวจสอบวามน reference ไปท耀幊 heap จดเดยวกนหรอไม

GetType() เปนการเรยกขอด Type­derived ของส耀幊งน䳩น

ToString() เปนการแปลงคากลบมาใหอยในรปแบบของ string, หาก object ของเราไมไดทาการ override ไวคาท耀幊ไดกลบมาจะเปนช耀幊อ class น䳩นๆ

** เน䳩อหาบางสวนผมไมไดอธบายท䳩งหมด หากทานตองการคาอธบายกรณาโพสตขอความไวนะครบ **(เน䳩อหาในบทความท䳩งหมดน䳩ถกเขยนใน IDE VisualStudio 2010 C# .NET V.4)

Edited by Miolynet, 08 September 2010 ­ 10:13 AM.

Posted 08 September 2010 ­ 10:13 AM

Miolynet

Expression (ไมใชเร耀幊อง lambda expression <<จะกลาวในบทถดๆๆไป>>)

ลาดบการดาเนนการทางคณตศาสตรของคอมพวเตอรน䳩นกจะเหมอนกนการคานวนของมนษย ซ耀幊งมลาดบในการจดความสาคญดงน䳩

ไลลาดบความสาคญจากสงไปหาต耀幊า (1 สงสด)1.()

2.++,­­ (กอน)3.*, / (คณ,หาร)4.+, ­ (บวก,ลบ)5.++,­­ (หลง)(ขออธบายคราวๆไมขออธบายท䳩งหมด จรงๆยงมอกหลายตวท耀幊ไมไดกลาวถง)

เชน (A/B ­C*D+E) * (F + G) * H เม耀幊อนาลาดบความสาคญมาดตะเหนวาม วงเลบ อย 2 วงดงน䳩

วงท耀幊 1.(A/B ­C*D+E)วงท耀幊 2.(F + G)

ลาดบความสาคญผมขอใหจางายๆวา ไลจากซายไปขวา ดงน䳩นจะเหนวาเราตองทาวงเลบท耀幊 1 กอนซ耀幊งภายในวงเลบท耀幊 1 น䳩นประกอบไปดวย

Posted 08 September 2010 ­ 10:14 AM

Page 7: C# Beginner to Expert - Microsoft .NET Developer - Narisa

A/B ­C*D+E

คราวน䳩เรากมาดลาดบความสาคญตอ จะเหนวาม *,/ (คณ กบ หาร) แบงเปนดงน䳩A/B

C*D

( *, / ) ลาดบความสาคญท耀幊ผมเขยนไวน䳩 ไมไดหมายความวาจะตองทา คณ กอน แลวคอยทา หาร นะครบ ทาส耀幊งใดกอนกไดไลจากซายไปขวา จะไดไมตองสบสน

จะไดวาทา A/B กอน แลวคอยไปทา C*Dดงน䳩นภายในวงเลบกจะไดดงน䳩(A/B )­(C*D)+E

ตอมาเรากจะเจอ ( +, ­ ) บวกกบลบ กจะเหมอนกบ คณกบหาร ไมไดหมายความวาตองทา + กอน แลวคอยทา ­ ไลจากซายไปขวาเชนเดม กจะไดวา(((A/B )­(C*D)) + E)

ตอนน䳩วงเลบซายมอเสรจแลว ตอไปคอวงเลบดานขวา(F + G)กใหเรานา F+G น䳩นเหลาะครบ เพราะภายในวงเลบมแค operation เดยว ซ耀幊งทาใหตอนน䳩เราไดเปนภาพน䳩

((((A/B )­(C*D)) + E) * (F + G)) * H

เม耀幊อเราทาตามลาดบทางคณตศาสตรจะทาใหเราคานวนไดอยางถกตองครบ

สวน ++,­­ ทาไมมนม 2 สวน เน耀幊องจากภาษา programming ในบางทผพฒนากไดพยายามใหผใชงานสามารถใชเคร耀幊องมอในการพฒนาโปรแกรมไดงายข䳩น ซ耀幊งทาใหเกดภาษาท耀幊มนษยอานแลวเขาใจได และรวดเรวตอการเขยน เชน

int a = 1;a = a +1;

จาก code เปนการบอกวาตวแปร a มคาเปน 1 ตอมาทาการเพ耀幊มคา a ข䳩นอก 1

แตเราสามารถเขยนโดยใช syntax เปน ++ ไดดงน䳩

int a = 1;a = a++;

ซ耀幊งกจะทาใหเราไดความหมายเหมอน code ดานบนเลยครบ เปนการบอกวา a มคาเปน a++ (a ท耀幊ถกเพ耀幊มคาข䳩นอก 1 น耀幊นเอง) ซ耀幊งเรากยงสามารถพฒนาเขยนใหส䳩นลงไดอก เปน code ดานลางน䳩

int a = 1;a++;

ในเม耀幊อม ++ กยอมสามารถม ­­ ไดเชนกนครบ (เปนการลดคาลงไป 1)

( ในภาษา C# น 攀นมแคเพยง ++, ­­ เทาน 攀นนะครบไมม ** หรอ // ) <<หากเราอยากใหม **,// เราตองไปเขยน extensionmethod เอาเอง ซ耀幊งจะอธบายในบทถดๆๆ ไปครบ>>

สวนเร耀幊อง ++,­­ มนอย กอนหนา หรอ ดานหลง น䳩นความหมายมนกไมเหมอนกนครบ เน耀幊องจากลาดบความสาคญของ กอนหนาน䳩นมากอนดงน䳩

int a = 1;Console.WriteLine( "Variable a is : 0",a );Console.WriteLine( "Variable a++ is : 0",a );Console.WriteLine( "Variable a is : 0",a );

Quote

[Output]Variable a is : 1

Variable a++ is : 1

Variable a is : 2

Page 8: C# Beginner to Expert - Microsoft .NET Developer - Narisa

operation ++ หรอ ­­ ท耀幊อยดานหลงน䳩นหมายความวา ใหเราดาเนนการบรรทดน䳩นใหเสรจเสยกอน แลวคอยทาการ เพ耀幊ม/ลด ในบรรทดถดมา

int b = 1;Console.WriteLine( "Variable b is : 0",b );Console.WriteLine( "Variable ++b is : 0",++b );Console.WriteLine( "Variable b is : 0",b );

Quote

[Output]Variable b is : 1

Variable ++b is : 2

Variable b is : 2

operation ++ หรอ ­­ อยกอนหนาหมายถง ใหเราดาเนนการ เพ耀幊ม/ลด คาดงกลาวทนทในบรรทดน䳩นเลย

** เน䳩อหาบางสวนผมไมไดอธบายท䳩งหมด หากทานตองการคาอธบายกรณาโพสตขอความไวนะครบ **(เน䳩อหาในบทความท䳩งหมดน䳩ถกเขยนใน IDE VisualStudio 2010 C# .NET V.4)

Edited by Miolynet, 08 September 2010 ­ 10:16 AM.

Miolynet

ตอนเยนๆผมจะนาบทความมาเขยนตอนะครบ ขอบคณครบ

Posted 08 September 2010 ­ 10:17 AM

Miolynet

C# Classes Part.1

ในหวขอน䳩ผมจะกลาวถง class กนบาง class คอส耀幊งท耀幊เปนตนแบบของส耀幊งท耀幊เราจะสรางข䳩นมา เชน ผมอยากจะ สรางหมา ผมกจะสรางclass ของหมาข䳩นมา ,ผมอยากสรางแมว ผมกจะสราง class แมวข䳩นมา (ตวอยางท耀幊กลาวมาน䳩เปนแคเพยงตวอยางเฉยๆในความเปนจรงมนไมไดแบบน䳩ไดทนท หากคณเปน programmer ท耀幊แทจรงคณจะตองทาการ analysis system ท䳩งหมดแลวทาการ design เสยกอนท耀幊จะลงมอในการเขยน class มฉน䳩น class ของคณจะกลาวเปน สปาเกตต䳩 <<หมายถงม耀幊วไปหมด อยากได method อะไรกเพ耀幊มๆๆเอา อยากไดตวแปรอะไรกเพ耀幊มๆเอา ซ耀幊งมนจะไมสงผลดตอการการ implement class น䳩นๆ>>)

วธการสราง class น䳩นทาไดงายๆดงนน䳩

Quote

<Access modifier> class <Class name>

<Access modifier> เปนกลไกหน耀幊งท耀幊ชวยในเร耀幊องของความความปลอดภยของการเขยน code ของเรา ซ耀幊ง Accessmodifier ของภาษา c# น䳩นประกอบไปดวยตวหลกๆ 4 ตวดงน䳩­ public : ใครกสามารถเขาถงและเรยกใชงานได­ protected : ใชงานไดเฉพาะ class ท耀幊 derived เทาน䳩น <จะกลาวถดไปในเร耀幊องของ oop>­ internal : ใชงานไดเฉพาะภายใต assembly เดยวกนเทาน䳩น, หรอพดงายๆใชไดเฉพาะ project เดยวกนเทาน䳩น ­ private : ใชงานไดเฉพาะ class มนเองเทาน䳩น** หากเราไมใส access modifier ใหกบคลาสของเรา ส耀幊งท耀幊ไดคอตว .net เองจะแอบใส accessibility ใหเราเปน internal ครบ<เร耀幊องของ access modifier จะกลาวถงวธการใชงานในบทถดๆไปครบ>

<Class name> ช耀幊อคลาสท耀幊คณตองการจะต䳩ง เชนผมอยากไดคลาสของหมา ผมกจะทาการสราง class เปนดงน䳩 (ในตวอยางเพ耀幊อความงายผมจะขอเขยน access modifier เปน public ไปกอนนะครบ ถงเวลาท耀幊ตองใชเร耀幊องน䳩หนกๆผมจะกลาวถงในภายหลง)

public class Dog

Class member types คราวน䳩เราจะมาพดถงวามอะไรบางท耀幊เราสามารถเขยนไวภายในคลาสของเราไดนะครบ

Posted 08 September 2010 ­ 12:28 PM

Page 9: C# Beginner to Expert - Microsoft .NET Developer - Narisa

Quote

­ Fields

­ Constants

­Methods

­ Constructors

­ Finalizer

­ Properties

­ Indexers

­ Operators

­ Events

ส耀幊งตางๆเหลาน䳩เราสามารถเขยนไวภายใน class ของเราไดท䳩งหมดครบ (ในแตละตวจะถกอธบายไปเร耀幊อยๆ แตบางตวจะอยในบทถดๆไปนะครบ)

[Fields] (อานวา ฟลว) : ตวแปรตางๆท耀幊นามาใชในการกาหนดคา หรอตรวจสอบการทางานของ class น䳩นๆ เชน int a** มาตรฐานของ .net มการกาหนดไววา ส耀幊งใดกตามทเปน field ท耀幊เปน Camel case จะตองข䳩นตนดวย _ <ซ耀幊งจะมขอยกเวนในบางกรณ จะกลาวในบทถดๆๆไป> แตไมทาตามกไมเปนไร

[Constructor] (อานวา คอนสตกเทอร) : มไวเพ耀幊อกาหนดคาเร耀幊มตนใหกบคลาสของเรา ซ耀幊งเจา constructor จะมช耀幊อเหมอนกบclass ของเราทกประการเชน

public class Dog public Dog() // น耀幊คอ constructor ของ class Dog

เจา constructor น䳩จะถกเรยกใชงานเม耀幊อมการทา instance initiate

[static constructor] (อานวา สทาทส คอนสตกเทอร) <จะขอกลาวในเร耀幊องของ static นะครบ>

[Constants] (อานวา คอนสแทน) : เปนตวแปรชนดหน耀幊งของ application ของเรา ซ耀幊งจะเปนคาคงท耀幊ตลอดเวลาท耀幊เรยกใชงานตวแปรชนดน䳩 ซ耀幊งจะม keyword คอ const โดยท耀幊เราจะตองทาการกาหนดคาเร耀幊มตนใหกบตวแปรชนดน䳩ทนทท耀幊ทาการประกาศตวแปรชนด constant เชน

public class Dog const double PI = 3.141;

** กฎเหลกในการต 攀งช耀幊อส耀幊งท耀幊เปน constant คอมนจะตองเปน ตวใหญเทาน 攀น (ในการเขยนโปรแกรมเราจะเขยนเปนตวเลกมนกสามารถทางานได แตมนจะไมตรงกบ software principle) <<เร耀幊องของ software principle ของ .net ผมจะกลาวในบทถดๆๆไปครบ เพราะมนจะมเร耀幊องท耀幊ตองรกอนหนาเยอะมาก เชน design pattern เปนตน>>

[Read­Only Fields] : เปนเหมอนกบ constant ทกประการ ยกเวนมนยงไมตองทาการกาหนดคาเร耀幊มตนเม耀幊อประกาศ แตมนจะตองถกกาหนดคาเสยกอนนาไปใชงาน และม keyword คอ readonly

public class Dog readonly double PI = 3.141;

[Properties] (อานวา พรอฟโพรต) : เปนกลไกของ C# อกตวหน耀幊งซ耀幊งมาทาหนาท耀幊ชวยการ access ตวแปรของเราโดยตรง ซ耀幊งมนจะเปนตวกลางในการตดตอระหวางตวแปรท耀幊แทจรงใหกบเรา

public class Dog private string _name;

public string Name get return _name; set _name = value;

เจา properties น䳩จะประกอบไปดวย get กบ set get : เม耀幊อขอเรยกดคาของมน มนจะสงคาท耀幊แทจรงกลบไปใหset เปนการกาหนดคาใหกบคาท耀幊แทจรง ซ耀幊งคาท耀幊สงมาจะถกกาหนดไวใน keyword value

C#3.0 Automatic Properties (AP) ส耀幊งน䳩จะมาพรอมกบ C# .net v.3 นะครบหากใครใช .net version ต耀幊ากวา 3.0กจะไมสามารถใชงานไดครบ

public class Dog

Page 10: C# Beginner to Expert - Microsoft .NET Developer - Narisa

public string Name get; set;

ส耀幊งน䳩กเปน properties เหมอนกบ properties ท耀幊ไดเคยกลาวไว แตจะเปนการสราง properties แบบส䳩นๆครบ (ซ耀幊งตวแปรท耀幊แทจรงเจา .net ของเรากจะแอบไป generate ใหเปนช耀幊อท耀幊ไมสามารถอานแลวเขาใจได อางองได แตไมสามารถนามาใชงานไดจรง)

** เหลา properties น䳩เราสามารถกาหนดใหเปน properties ท耀幊 อาน / เขยน ไดอยางเดยว โดยการ ตด หรอ กาหนดacccessibilityครบ

public class Dog private string _name;

public string Name get return _name; private set _name = value;

อนน䳩เปนการกาหนด properties ท耀幊สามารถอานไดอยางเดยวเทาน䳩น หรอเรายงสามารถทาแบบน䳩กได

public class Dog private string _name;

public string Name set _name = value;

ส耀幊งน䳩คอ properties ท耀幊สามารถเขยนไดอยางเดยวอานไมได

C# V3.0

public class Dog public string Name get; private set;

ส耀幊งน䳩คอ properties ท耀幊สามารถอานคาของ Name ไดอยางเดยว เขยนไมได (จะอางองมนไดจากภายใน class เทาน䳩น)

** เน䳩อหาบางสวนผมไมไดอธบายท䳩งหมด หากทานตองการคาอธบายกรณาโพสตขอความไวนะครบ **(เน䳩อหาในบทความท䳩งหมดน䳩ถกเขยนใน IDE VisualStudio 2010 C# .NET V.4)

Edited by Miolynet, 08 September 2010 ­ 12:33 PM.

Miolynet

C# Classes Part.2

[Method] (อานวา เมธอต) : เปน function ของ class น䳩นๆ หรอเปนตวท耀幊บอกวา class น䳩นๆสามารถทาอะไรไดบาง เชนclass Dog ม method ช耀幊อ Walk หมายความวา ส耀幊งท耀幊เปน object ของ class Dog น䳩นจะสามารถทาการ Walk ไดน耀幊นเอง­ method signature หรอ วธการประกาศ method ท耀幊เปนมาตรฐาน <<ตรงน䳩จะเก耀幊ยวของกบเร耀幊อง delagate>>

<Accessibility> <Return type> <Method name> ( <Parameters> )

Accessibility : เหมอนกบท耀幊อธบายไปในสวนของ class => public , protected , internal , private Return type : เปนการบอกวา หลงจากทางาน method น䳩เสรจส䳩นแลว จะให method น䳩สงคาอะไรกลบมา เชน ตองการใหสงคากลบมาเปนตวเลขจานวณเตมกกาหนดสวน return type เปน int

Method name : ช耀幊อของ method ท耀幊เราตองการ จะเปนอะไรกไดขอแคเพยงอยาไปซ䳩ากบ reserve word เชน จะต䳩งช耀幊อmethod น䳩นวา double ไมได <<เร耀幊องการทา virtual, override, overload , behind จะกลาวถงในบทถดๆๆไป>>

Parameters : ....

­ method จะถกประกาศอยภายใต class (หมายถงอยภายใน ... ของ class น䳩นๆ) เชน

STEP 1.Method ธรรมดาท耀幊ไมม return (void), และไมม parameter ใดๆ

Posted 08 September 2010 ­ 12:37 PM

Page 11: C# Beginner to Expert - Microsoft .NET Developer - Narisa

public class Dog public void Walk()

อธบาย : จาก code ตวอยางน䳩คอ class Dog ท耀幊ม method ตวเดยวคอ Walk() เม耀幊อนา Code น䳩ไปใชงานแลวเราตองการเรยกใชงานmethod walk จะทาไดโดยการเขยนแบบน䳩

class Program static void Main(string[] args) Dog d1 = new Dog(); d1.Walk();

STEP 2.Method ท耀幊มการสงคากลบ แตไมม parameter

สมมตวาผมตองการสราง class ของเคร耀幊องคดเลข "Calculator" แลวใน class น䳩ม method ท耀幊จะสงคาของ พาย (PI = 3.141 )กลบมาผมจะเขยน code ไดวา

public class Calculator public double PI() return 3.141;

จาก code ตวอยางน䳩จะเหนวา method PI ของเราม return type เปน double หมายถง เม耀幊อมการเรยกใชงาน method PI() เจาmethod น䳩จะทาการสงคากลบไปเปน double น耀幊นเอง สวน keyword ท耀幊ใชในการสงคากลบไปกคอ "return" จาก code จะเหนวาเจา method PI() ทาการ return 3.141 หมายความวา เม耀幊อใดกตามท耀幊ผมเรยกใชงาน PI() ผมจะไดคากลบมาเปน 3.141 เสมอครบ

class Program static void Main(string[] args) Calculator d1 = new Calculator(); Console.WriteLine( d1.PI() );

Quote

[Output] : 3.141

STEP 3.Method ท耀幊มการสงคากลบ และมการรบ parameter 1 ตว

ตอจาก class Calculator นะครบ คราวน䳩ผมตองการใหเจาเคร耀幊องคดเลขของผมมนสามารถทาการ บวกเลข ได โดยการกาหนดตวเลขท耀幊ตองการลงไป แลวมนจะทาการ นาเลขท耀幊รบน䳩ไปบวกกบ 9 เราจะตองทาการกาหนด parameter ใหกบ method โดยมโครงสราง parameter ดงน䳩

<Data type> <Parameter name>

เชน public int Add(int operan1) return operan1 + 9;

จาก code หมายความวา เม耀幊อใดกตามท耀幊ผมตองการจะใชงานเจา method Add() น䳩 จะตองทาการสง int ไป 1 ตว ถงจะทาใหmethod Add() น䳩สามารถทางานได

class Program static void Main(string[] args) Calculator d1 = new Calculator(); Console.WriteLine( d1.Add(31) );

Quote

[Output] : 40

STEP 4.Method ท耀幊มการรบ parameter n ตว เม耀幊อการทางานของโปรแกรมซบซอนมากข䳩น การกาหนด parameter เพยงตวเดยวอาจจะไมเพยงพอตอการใชงาน C# เลยกาหนดวาหากเราตองการให method น䳩นมการกาหนด parameter มากกวา 1 ตวสามารถกาหนดไดโดยการระบ "," (Comma คอมมา) ค耀幊น

Page 12: C# Beginner to Expert - Microsoft .NET Developer - Narisa

ไวในแตละ parameter ได เชน public class Calculator public int Add(int operan1,int operand2) return operan1 + operand2;

** เน䳩อหาบางสวนผมไมไดอธบายท䳩งหมด หากทานตองการคาอธบายกรณาโพสตขอความไวนะครบ **(เน䳩อหาในบทความท䳩งหมดน䳩ถกเขยนใน IDE VisualStudio 2010 C# .NET V.4)

Edited by Miolynet, 08 September 2010 ­ 12:39 PM.

Miolynet

ในเร耀幊องของ method น䳩ผมขอขามในเร耀幊องของ extension method ไปกอนนะครบ แลวจะพดถงภายหลงในหวขอของ OOP ครบ

C# Keyword "new" Operator

ในภาษา C# น䳩นจะม keyword อยตวหน耀幊งช耀幊อ "new" ซ耀幊ง keyword น耀幊䳩มหนาท耀幊การทางานดงน䳩­ สราง Object ข䳩นมาน耀幊นเอง ­ new น䳩จะมผลใหการทางานของ Constructor ถกเรยกใชงานดวยเชนกน

เชน public class Student public string Name get; set; public int Score get; set;

การนา new มาสราง object ทาโดย class Program static void Main(string[] args) Student s1 = new Student(); s1.Name = "Sakul Jaruthanaset"; s1.Score = 10;

เปนการสราง object ช耀幊อ s1 ข䳩นมา (Object initiate)

[C# 3.0] Object Initializers (OI) ใน C# version 3 น䳩นมความสามารถในการสราง Object ข䳩นมาพรอมกบกาหนดคาใหกบเหลา properties ไดทนทดวย โดยการใชโครงสรางดงน䳩

class Program static void Main(string[] args) Student s1 = new Student Name = "Sakul Jaruthanaset", Score = 10 ;

หากเราตองการใหมนมการเรยกใชงาน Constructor ดวยกสามารถทาไดเชนกน class Program static void Main(string[] args) Student s1 = new Student("Sakul Jaruthanaset") Score = 10 ;

public class Student public string Name get; set; public int Score get; set;

public Student(string name) Name = name;

Posted 08 September 2010 ­ 12:40 PM

Page 13: C# Beginner to Expert - Microsoft .NET Developer - Narisa

** เน䳩อหาบางสวนผมไมไดอธบายท䳩งหมด หากทานตองการคาอธบายกรณาโพสตขอความไวนะครบ **(เน䳩อหาในบทความท䳩งหมดน䳩ถกเขยนใน IDE VisualStudio 2010 C# .NET V.4)

Edited by Miolynet, 08 September 2010 ­ 12:41 PM.

Miolynet

C# Partial Classes

keyword อกหน耀幊งตวของ C# คอ partial (อานวา พาเชยล) ซ耀幊งหนาท耀幊ของเจาตวน䳩คอ­ การแบง source file ไวหลายๆท耀幊 อาจจะ >= 2 กไดแลวแตผพฒนาจะมาทาการออกแบบไว­ เม耀幊อมการใช partial keyword ใหกบ class ใดแลว class น䳩นท䳩ง class กจะเปน partial type ดวยท䳩งหมด­ ทกๆ part ท耀幊ทา partial จะม accessibility เดยวกนท䳩งหมด­ หากม part ไหนท耀幊กาหนดเปน abstract ทกๆ part กจะเปน abstract ดวย­ หากม part ไหนท耀幊กาหนดเปน sealed ทกๆ part กจะเปน sealed ดวย­ หากม part ไหนท耀幊กาหนดเปน base type ทกๆ part กจะเปน base type ดวย

ตวอยาง : ทาการสราง class Student ข䳩นมา 2 class แลวกาหนดใหท䳩ง 2 class น䳩นเปน partial (หากไมกาหนดมนจะ compile ไมผาน) แลวกาหนดใหท䳩ง 2 ตวม properties ท耀幊ตางกน Name กบ Score

public partial class Student public string Name get; set;

public partial class Student public int Score get; set;

แลวทดสอบทาการเขยน code ท耀幊นา Student มาใชงาน class Program static void Main(string[] args) Student s1 = new Student Name = "Sakul Jaruthanaset", Score = 10 ;

จะเหนวาเราสามารถนา Name และ Score มาใชงานได ท䳩งๆท耀幊เจา properties ท䳩ง 2 ตวน䳩มนอยตางท耀幊กนกตาม

ขอดของการนา partial ไปใชงาน : เราสามารถเขยน code ไวสวนหน耀幊งแลวนาไปใหคนในองคกรตอเตม code ของเราได ซ耀幊งปรกตเราจะเหน class ท耀幊เปน partial บอยๆในการใชงาน WCF Services , LinQ DataClassed เปนตน

** เน䳩อหาบางสวนผมไมไดอธบายท䳩งหมด หากทานตองการคาอธบายกรณาโพสตขอความไวนะครบ **(เน䳩อหาในบทความท䳩งหมดน䳩ถกเขยนใน IDE VisualStudio 2010 C# .NET V.4)

Edited by Miolynet, 08 September 2010 ­ 12:46 PM.

Posted 08 September 2010 ­ 12:44 PM

Miolynet

C# Partial Methods

ในคร䳩งท耀幊耀幊แลวผมไดกลาวถงการทา partial class ไปแลว คราวน䳩เราจะมากลาวถงการทา method ใหเปน partial อกดวย­ partial method ทางานเม耀幊อ designer­generated­classes ­ เม耀幊อเราทาการออกแบบ partial method แลวมนจะถกนาไปใชกบทกๆ partial class­ หากมการแกไขหรอเขยน partial method แลว ส耀幊งเดมท耀幊เคยเขยนจะหายไป­ อยาไปทาการ derive partial method

Posted 08 September 2010 ­ 12:47 PM

Page 14: C# Beginner to Expert - Microsoft .NET Developer - Narisa

­ partial method จะตองเปน private เทาน䳩น (หามใส accessibility ตอนนยาม partial method)­ partial method ไมสามารถม return value ใดๆได (void)­ เราไมสามารถทาการ multi implement partial method ได

ตวอยาง public partial class Student partial void MyPartialMethod();

public partial class Student partial void MyPartialMethod() throw new NotImplementedException();

** เน䳩อหาบางสวนผมไมไดอธบายท䳩งหมด หากทานตองการคาอธบายกรณาโพสตขอความไวนะครบ **(เน䳩อหาในบทความท䳩งหมดน䳩ถกเขยนใน IDE VisualStudio 2010 C# .NET V.4)

Miolynet

ไวตอนเยนๆของวนน䳩ผมจะมา update ใหเพ耀幊อนๆตอนะครบ หวงวาคงจะเปนประโยชนตอเพ耀幊อนๆหลายๆคนท耀幊กาลงเร耀幊มตนท耀幊อยากจะเรยนร C# ต䳩นแตเบ䳩องตนครบ

Posted 08 September 2010 ­ 12:48 PM

Miolynet

Method parameter types ในบทความท耀幊แลวผมไดกลาวถงการกาหนด parameter ใหกบ method ของเรา คราวน䳩ผมจะมาพดถง parameter ของ methodบางนะครบ ซ耀幊ง parameter ท耀幊เราระบใหกบ method น䳩นแบงออกเปน 3 กลมใหญๆดงน䳩

Quote

­ Value type

­ Reference type

­ Parameter Array type

[Value Type] : เปนการสง value type ใหกบ method ของเราซ耀幊งเหมอนๆกบตวอยางบทความท耀幊แลว ซ耀幊ง parameterท耀幊ทาการสงไปน䳩นเปนสง copy คาน䳩นๆไปเทาน䳩น เม耀幊อมการเปล耀幊ยนแปลงคาใน parameter ไป ตวแปรท耀幊เปนตนกาเหนดจรงๆจะไมมการเปล耀幊ยนแปลงคาใดๆ เชน

class Program static void Main(string[] args) int operand1 = 10; Console.WriteLine("(Before) CALL FROM MAIN: Values is 0", operand1);

Student s1 = new Student(); s1.NormalParameter(operand1); Console.WriteLine("(After) CALL FROM MAIN: Values is 0",operand1);

public partial class Student public void NormalParameter(int operand1) operand1 = 50; Console.WriteLine("CALL FROM METHOD: Values is 0", operand1);

Quote

[Output](Before) CALL FROM MAIN: Values is 10

CALL FROM METHOD: Values is 50

(After) CALL FROM MAIN: Values is 10

Posted 09 September 2010 ­ 12:11 AM

Page 15: C# Beginner to Expert - Microsoft .NET Developer - Narisa

[Reference Type] เปนการสง Reference type ใหกบ method ซ耀幊งจะแบงออกได 2 ชนดดงนน䳩

(1) Ref เปนการสง address ของ object ของเราไปยง method ซ耀幊งไมใชการ coppy คาไป โดยการใช keyword วา ref เม耀幊อมการเปล耀幊ยนแปลงคาใหกบ parameter ภายใน method จะทาใหคาตนกาเหนดน䳩นถกเปล耀幊ยนแปลงไปดวยเชนกนเชน

class Program static void Main(string[] args) int operand1 = 10; Console.WriteLine("(Before) CALL FROM MAIN: Values is 0", operand1);

Student s1 = new Student(); s1.RefParameter(ref operand1); Console.WriteLine("(After) CALL FROM MAIN: Values is 0",operand1);

public partial class Student public void RefParameter(ref int operand1) operand1 = 50; Console.WriteLine("CALL FROM METHOD: Values is 0", operand1);

Quote

[Output](Before) CALL FROM MAIN: Values is 10

CALL FROM METHOD: Values is 50

(After) CALL FROM MAIN: Values is 50

(2) Out เหมอนกนกบ Ref แตใช keyword วา out แตแตกตางกนคอ ในบางทเราตองการให method น䳩นสราง value ใหกบเราเองโดยท耀幊เราไมตองกาหนดคาเร耀幊มตนใหกบส耀幊งท耀幊สงไป

class Program static void Main(string[] args) int operand1;

Student s1 = new Student(); s1.OutParameter(out operand1); Console.WriteLine("CALL FROM MAIN: Values is 0",operand1);

public partial class Student public void OutParameter(out int operand1) operand1 = 50; Console.WriteLine("CALL FROM METHOD: Values is 0", operand1);

Quote

[Output]CALL FROM METHOD: Values is 50

CALL FROM MAIN: Values is 50

[Parameter Array Type] : เปนการสงชดของ array มาใหกบ method

Params เปนอก keyword หน耀幊งซ耀幊งทาใหเราสามารถสงคา array ไปยง method ของเราได โดยใช keyword วา params แตparams ของเราจะตองเปน parameter ท耀幊อยทายสดเทาน䳩น

class Program static void Main(string[] args) Student s1 = new Student(); s1.ParamParameter(1, 2, 3, 4, 5);

public partial class Student public void ParamParameter(params int[] operand1)

Page 16: C# Beginner to Expert - Microsoft .NET Developer - Narisa

Page 1 of 2 Back to Microsoft .NET Developer

Narisa.com → Microsoft Technology → Microsoft .NET Developer

foreach (var item in operand1) Console.WriteLine(item);

Quote

[Output]1

2

3

4

5

** เน䳩อหาบางสวนผมไมไดอธบายท䳩งหมด หากทานตองการคาอธบายกรณาโพสตขอความไวนะครบ **(เน䳩อหาในบทความท䳩งหมดน䳩ถกเขยนใน IDE VisualStudio 2010 C# .NET V.4)

Edited by Miolynet, 09 September 2010 ­ 12:14 AM.