29
Visual C# 2010 Express 6. Method เเเเเเเเเเเเเเเเเเเเเเเเ เเเเเเเเเเเเเเเเ 1 C# Programming with Visual C# 2010 Express

6. Method

  • Upload
    druce

  • View
    30

  • Download
    0

Embed Size (px)

DESCRIPTION

6. Method. เมธอดคือหน้าที่การงานของวัตถุให้เรียกใช้. เป้าหมายการเรียนรู้. การนิยามเมทธอด ทั้งสเตติก และอินสแตทซ์เมทธอด เมทธอดโอเวอร์โหลด การใช้ตัวแปรเข้าแบบไดนามิกด้วยอะเรย์ ตัวแปรท้องถิ่น ในเมธอด การคืนค่าในเมธอด ตัวแปรทางเลือกของเมทธอด การเรียกเมทธอดด้วยการระบุชื่อตัวแปร - PowerPoint PPT Presentation

Citation preview

Page 1: 6. Method

Visual C# 2010 Express

6. Method

เมธอดคื�อหน้าที่ �การงาน้ของวั�ตถุ�ใหเร ยกใช้

1C# Programming with Visual C# 2010 Express

Page 2: 6. Method

เป้�าหมายการเร ยน้ร� การน้�ยามเมที่ธอด ที่� งสเตต�ก และอ�น้สแตที่ซ์&เมที่ธอด เมที่ธอดโอเวัอร&โหลด การใช้ต�วัแป้รเขาแบบไดน้าม�กดวัยอะเรย& ต�วัแป้รที่องถุ��น้ ใน้เมธอด การคื�น้คื*าใน้เมธอด ต�วัแป้รที่างเล�อกของเมที่ธอด การเร ยกเมที่ธอดดวัยการระบ�ช้��อต�วัแป้ร การสรางเมที่ธอดอ�ตโน้ม�ต� กลไกการส*งต�วัแป้ร และ แน้วัที่างการใช้ต�วัแป้ร การใหเมที่ธอดเร ยกใช้ต�วัเอง

2C# Programming with Visual C# 2010 Express

Page 3: 6. Method

อะไรคื�อเมธอดเมที่ธอดคื�อกล�*มของคื+าส��ง ภาษาสม�ยใหม*ที่�กต�วัใช้

แน้วัคื�ดเด ยวัก�น้น้ เราอาจคื�ดเป้ร ยบเที่ ยบไดวั*า เมที่ธอดก/คื�อ

Function, Subroutine, Procedure, Subprogram

เราจะส�งเกตไดง*ายๆ วั*าอะไรเป้1น้เมที่ธอด เมที่ธอดจะม เคืร��องหมาย วังเล/บ “( )” ต*อที่ายช้��อเมที่ธอด

C# Programming with Visual C# 2010 Express 3

Page 4: 6. Method

เมธอด Main( ) class Program { static void Main(string[] args) { Console.WriteLine( “OK”); CheckEmpty( ); }  private static void CheckEmpty() { } } สั�งเกตไหม เมธอด ทำ��ไมต�องเป็�น static ด�วย

ศึ�กษ�ต�อไป็ ก�จะตอบคำ��ถ�มน!"ได�C# Programming with Visual C# 2010 Express 4

Page 5: 6. Method

การน้�ยามเมที่ธอด การต� งช้��อ ช้��อไม*คืวัรเร��มตน้ดวัย ข ดล*าง คืวัรใช้อ�กษรพิ�มพิ&

ใหญ่*น้+าหน้า และคืวัรเป้1น้คื+ากร�ยา การใช้ต�วัแป้รเขา จ+าน้วัน้ต�วัแป้รม เที่*าไหร*ก/ได ต�วัแป้รเขาแต*ละ

ต�วัจะก+าหน้ดช้น้�ดขอม�ลของต�วัแป้รเขาดวัย และจะไม*ม ต�วัแป้รเขาเลยก/ได

ที่�กคื+าส��งภายใน้เมธอด จะตองอย�*ภายใน้เคืร��องหมายป้4กกา ถุ5งแมจะคื+าส��งเด ยวัก/ตาม

เมธอดที่ �ม การคื�น้คื*า ระบ�ช้น้�ดขอม�ลการคื�น้คื*าก*อน้ช้��อเมที่ธอด และการคื�น้คื*าเป้1น้ช้น้�ดขอม�ลอะไรจะตองม คื+าส��ง return ภายใน้ส*วัน้เมธอด

เมธอดใดไม*คื�น้คื*าช้น้�ดขอม�ลอะไร ใหใช้การคื�น้คื*าเป้1น้ void

C# Programming with Visual C# 2010 Express 5

Page 6: 6. Method

การเร ยกใช้เมธอด การเร ยกเมธอด ที่+าไดโดยการเร ยกช้��อเมธอดแลวัตามดวัย

ต�วัแป้รเขาใหตรงก�บที่ �ไดน้�ยามไวั หร�อไม*ตองม ต�วัแป้รเขาใน้กรณี ที่ �ไม*ไดน้�ยามต�วัแป้รเขาไวั แต*ย�งคืงตองม วังเล/บวั*างไวั ด�งน้� น้แลวัจะตองม วังเล/บเสมอ

การเร ยกเมธอดจากคืลาสอ��น้ กรณี เป้1น้ static method ที่+าไดโดยการเร ยกช้��อคืลาส

แลวัตามดวัยช้��อเมธอดที่ �ตองการของคืลาสน้� น้ กรณี ไม*เป้1น้ static method ที่+าไดโดยการเร ยกช้��อ

instance แลวัตามดวัยช้��อเม*ธอด

C# Programming with Visual C# 2010 Express 6

Page 7: 6. Method

การเร ยกเมธอดจากต*างคืลาส1. class Program {

2. public static void main( String[ ] args)

3. {

4. Example ex = new Example( );

5. // ตองสรางเป้1น้ Instance ก*อน้ จ5งเร ยกเมธอด ผ่*าน้ช้��อ instance

6. ex.C( );

7. Example. D( ); // เร ยกผ่*าน้ช้��อคืลาสไดเลย8. }9. }

10. Class Example

11. {

12. public int C( ) { }

13. public static int D ( ) { }

14. }

C# Programming with Visual C# 2010 Express 7

Page 8: 6. Method

การคื�น้คื*าของเมที่ธอด การป้ระกาศเมที่ธอดเป้1น้ช้น้�ดไม*ม void เมที่ธอดช้น้�ดไม*ม void จะตองม การคื�น้คื*าเสมอ การเพิ��มคื+าส��งคื�น้คื*าดวัย return

C# Programming with Visual C# 2010 Express 8

static int TwoPlusTwo( ){int a,b;a = 2;b = 2;return a + b;}

Page 9: 6. Method

การใช้คื+าส��ง Return Return ที่�น้ที่ Return แบบม เง��อน้ไข

C# Programming with Visual C# 2010 Express 9

static void ExampleMethod( ){Console.WriteLine("Hello");return;Console.WriteLine("World");}

static void ExampleMethod( ){int numBeans;//...Console.WriteLine("Hello");if (numBeans < 10)return;Console.WriteLine("World");

Page 10: 6. Method

การใช้ต�วัแป้รที่องถุ��น้ (Local Variable) ต�วัแป้รที่องถุ��น้

สรางภายใน้เมที่ธอด เป้1น้ของเมที่ธอดใช้ หายไป้เม��อเมที่ธอดจบการที่+างาน้

ต�วัแป้รที่ �ใช้ร*วัมก�น้ใน้เมที่ธอด ตองเป้1น้ต�วัแป้รระด�บสมาช้�กของคืลาส

ขอบเขตต�วัแป้รข�ดก�น้ ต�วัแป้รที่องถุ��น้ก�บต�วัแป้รระด�บสมาช้�กของคืลาสที่ �ใช้ช้��อเหม�อน้ก�น้

C# Programming with Visual C# 2010 Express 10

Page 11: 6. Method

การป้ระกาศและเร ยกใช้ต�วัพิาราม�เตอร& การป้ระกาศต�วัพิาราม�เตอร&

วัางใน้วังเล/บหล�งช้��อเมที่ธอด ก+าหน้ดช้น้�ดขอม�ลและช้��อต�วัพิาราม�เตอร&

การเร ยกเมที่ธอดก�บต�วัพิาราม�เตอร& เร ยกช้��อและตามดวัยช้น้�ดต�วัพิาราม�เตอร&ใหคืรบจ+าน้วัน้

C# Programming with Visual C# 2010 Express 12

ต�วอย��งก�รใช้�static void MethodWithParameters(int n, string y){ ... }ต�วอย��งก�รเร!ยกMethodWithParameters(2, "Hello, world“);

Page 12: 6. Method

เมที่ธอดโอเวัอร&โหลด (overload) คื�อเมที่ธอดที่ �ม ช้��อเหม�อน้ก�บภายใน้คืลาส ม เป้�าหมายเพิ��อใหตอบสน้องต*างก�น้ ใน้ช้��อเมธอดเด ยวัก�น้ ตามคืวัาม

เหมาะสมที่ �จะสน้�บสน้�น้การเร ยกใช้งาน้ เช้*น้ ม ขอม�ลต�วัแป้รที่ �ส*งเขาเมธอด ไม*เหม�อน้ก�น้

คืวัามแตกต*างอย�*ที่ �รายการต�วัพิาราม�เตอร&ของเมที่ธอด การเร ยกใช้เมที่ธอด ตองระบ�รายการพิาราม�เตอร&ใหตรงก�บที่ �น้�ยามไวั

C# Programming with Visual C# 2010 Express 13

static int Add(int a, int b){return a + b;}static int Add(int a, int b, int c){return a + b + c;}

Page 13: 6. Method

ล�กษณีะโอเวัอร&โหลดที่ �ที่+าได Signature เป้1น้รายการพิาราม�เตอร&ของเมที่ธอดที่ �ตองไม*ม ซ์+ าก�น้

ของการที่+าโอเวัอร&โหลดเมที่ธอด ด�งม คืวัามต*างคื�อ ช้น้�ดต�วัแป้รไม*เหม�อน้ก�น้ จ+าน้วัน้ต�วัแป้รไม*เที่*าก�น้ ล+าด�บต�วัแป้รไม*เหม�อน้ก�น้(ด�ที่ �ช้น้�ดต�วัแป้ร)

Signature ไม*รวัมช้��อต�วัพิาราม�เตอร& การคื�น้คื*าของเมที่ธอด แต*การคื�น้คื*าตองเหม�อน้ก�น้

C# Programming with Visual C# 2010 Express 14

class Customer { private int id; public void SetId(int value) { id = value; } public void SetId(string value) { if (! int.TryParse(value, out id)) Console.WriteLine("failed:Must be integer value."); } public int GetId() { return id; }}

Page 14: 6. Method

ต�วัแป้รที่างเล�อกของเมธอด การที่+าโอเวัอร&โหลดไม*เพิ ยงพิอที่ �สน้�บสน้�น้การที่+างาน้แบบน้

void OptionalPara(int x1, float x2) { ที่+างาน้อย*างแบบ1}void OptionalPara(int x1, int x2, float x3) { ที่+างาน้อย*างแบบ2} void OptionalPara(int x1, float x3) // ที่+าไม*ได { ที่+างาน้อย*างแบบ3}

ซ์ ช้าร&ป้สน้�บสน้�น้การใช้เป้1น้แป้รที่ �ใหเล�อกใหใส*ได ไม*ใส*ก/ได (ที่ �เร ยกช้��อวั*าที่างเล�อกมาจากคื+าวั*า Option ) แต*ย�งคืงที่+างาน้ได

C# Programming with Visual C# 2010 Express 15

Page 15: 6. Method

การสรางต�วัแป้รที่างเล�อก

เราสรางต�วัแป้รที่างเล�อกที่ �ม การที่+าโอเวัอร&โหลดไป้ดวัย เราจะใส*ต�วัแป้ร 2 ต�วั หร�อ 3 ต�วัก/ได และส�งเกตดวัยวั*า เมธอดส�ดที่ายม ต�วัแป้รเขา 3 ต�วั ม การก+าหน้ดคื*าใหต�วัแป้รส�ดที่าย = 0.0F แต*ใน้การที่+างาน้จร�งสามารถุเป้ล �ยน้คื*าเป้1น้ 10.0F ได

ส+าหร�บการไม*ใส*ต�วัแป้รที่ � 3 เมธอดน้ จะก+าหน้ดคื*าป้ร�ยายให โดยสามารถุใส*เง��อน้ไขได

ตองใหต�วัแป้รที่างเล�อกอย�*ใน้ล+าด�บส�ดที่ายเที่*าน้� น้C# Programming with Visual C# 2010 Express 16

1. void OptionalPara(int x1, float x2) 2. { ที่+างาน้อย*างแบบ1}3. void OptionalPara(int x1, int x2, float x3) 4. { ที่+างาน้อย*างแบบ2}5. void OptionalPara(int x1, float x2, float x3 = 0.0F)6. { ที่+างาน้อย*างแบบ3}

Page 16: 6. Method

การเร ยกเมธอดดวัยการระบ�ช้��อต�วัแป้ร น้อกจากการใส*ต�วัแป้ร และช้น้�ดต�วัแป้รตามล+าด�บของการ

ก+าหน้ดเมธอดแลวั ซ์ ช้าร&ป้ ย�งย�ดหย�*น้ไดอ ก ดวัยการใส*ต�วัแป้ร และช้น้�ดต�วัแป้ร ไม*ตองตามล+าด�บได ดวัยการก+าหน้ดช้��อต�วัแป้รเขาใน้การเร ยกใช้งาน้ ด�งต�วัอย*างต*อไป้น้

C# Programming with Visual C# 2010 Express 17

1. static void Main(string[] args)2. {3. OptionalPara(x1: 1, x3: 10.0F, x2:2.0F);4. Console.ReadKey();5. }6. static void OptionalPara(int x1, float x2, float x3 = 0.0F)7. {8. Console.WriteLine("Optional3Para");9. Console.WriteLine("x1:{0}", x1);10. Console.WriteLine("x2:{0}", x2);11. if (x3!=0.0)12. Console.WriteLine("x3:{0}", x3);13. }

Page 17: 6. Method

การสรางเมธอดอ�ตโน้ม�ต� (Refactoring Code)

C# Programming with Visual C# 2010 Express 18

การใช้ Refactor เพิ��อสรางเมธอดอ�ตโน้ม�ต� ที่+าใหการเข ยน้โป้รแกรมสะดวัก และที่+าใหการด�แลร�กษา ป้ร�บแต*งโป้รแกรมง*ายข5 น้

Page 18: 6. Method

กลไกการส*งต�วัแป้ร ร�ป้แบบการส*งผ่*าน้ต�วัแป้รม อย�*สามแบบคื�อ1 .การส*งต�วัแป้รเขา (By Value) การส*งแบบน้ บางที่ ก/เร ยก in ซ์5�ง

เป้1น้คื*าป้ร�ยาย (ไม*ใส*คื+าวั*า in ) ต�วัแป้รน้ จะที่+าส+าเน้าต�วัแป้รเขามา จะม ผ่ลเฉพิาะต�วัแป้รภายใน้เมธอดเที่*าน้� น้ ส*วัน้ใหญ่*การใน้การเข ยน้โป้รแกรมจะใช้การส*งต�วัแป้รเขาแบบน้ ซ์5�งที่ �ผ่*าน้มาเราก/ใช้แบบน้ ที่� งหมด

2. การส*งต�วัแป้รโดยการอางอ�ง (By Reference) การส*งแบบน้ ไม*ม การที่+าส+าเน้าต�วัแป้รต�น้ที่างแต*จะใช้การอางอ�งแที่น้ ด�งน้ การเป้ล �ยน้แป้ลงต�วัแป้รน้ จ5งม ผ่ลต*อต�วัแป้รตน้ที่าง หร�อเร ยกวั*า ม in และ out

3. การส*งต�วัแป้รออก หร�อเร ยกวั*า out เพิราะต�วัแป้รน้ ม ผ่ลต*อต�วัแป้รภายน้อก แต*ไม*ม ผ่ลต*อต�วัแป้ร ภายใน้เมธอด

C# Programming with Visual C# 2010 Express 19

Page 19: 6. Method

ต�วัอย*างการใช้ต�วัแป้ร By Value1. static void AddOne(int x)2. {3. x++; // Increment x4. }5. static void Main( )6. {7. int k = 6;8. AddOne(k); 9. Console.WriteLine(k); // Display the value

6, not 710. }

C# Programming with Visual C# 2010 Express 20

Page 20: 6. Method

ต�วัอย*างการใช้ต�วัแป้รเขาแบบอางอ�ง1. static void Main(string[] args){2. int i = 6; int j = 6;3. AddRefOneValueOne(ref i, j);4. Console.WriteLine("{0}, {1}", i,j); 5. // Display the value 7, 66. Console.ReadKey();7. } 8. static void AddRefOneValueOne(ref int x, int y){9. x++;10. y++;11. }

C# Programming with Visual C# 2010 Express 21

Page 21: 6. Method

ต�วัอย*างการใช้ต�วัแป้ร out1. static void OutMethod(out int p){2. p = 1;3. }4. static void Main(string[] args){5. int p = 2;6. OutMethod(out p);7. Console.WriteLine(p);// Display 18. Console.Read();9. }

C# Programming with Visual C# 2010 Express 22

Page 22: 6. Method

การใช้ต�วัแป้รเขาแบบไดน้าม�กดวัยอะเรย& ใน้บางคืร� งเม��อตองการใหต�วัแป้รเขา หลายต�วั การใช้เมธอด

โอเวัอร&โหลด จ+าน้วัน้ที่ �ม ต�วัเขาต*างๆ จะที่+าใหม เมธอดโอเวัอร&โหลดจ+าน้วัน้มาก เก�น้ไป้

การแกป้:ญ่หาน้ แกไดดวัยการที่+า ใหม ต�วัแป้รเขาแบบไดน้าม�ก ใช้คื ย&เวั�ร&ด params

ป้ระกาศเป้1น้อาร&เรย& ส*งผ่*าน้บบ การส*งต�วัพิาราม�เตอร&เขา

C# Programming with Visual C# 2010 Express 23

static long AddList(params long[ ] v){long total, i;for (i = 0, total = 0; i < v.Length; i++)total += v[i];return total;}static void Main( ){long x = AddList(63,21,84);}

Page 23: 6. Method

เง��อน้ไขการใช้ต�วัแป้รเขาแบบไดน้าม�ก ม เพิ ยงหน้5�ง params ต*อหน้5�งเมธอด วัางไดที่ �ต+าแหน้*งที่ายส�ดของต�วัแป้ร ม เพิ ยงอะเรย&หน้5�งม�ต�เที่*าน้� น้

C# Programming with Visual C# 2010 Express 25

1.static void Main(string[] args) {2.Console.WriteLine(Accumulate("total:", 1, 2, 3, 4));3.//print total:104.Console.ReadKey();5.}6.public static string Accumulate(string print, params int[] value ) {7.int sum = 0;8.foreach (var item in value) { sum += item; } 9.return print + Convert.ToString(sum);10.}

Page 24: 6. Method

แน้วัที่างการใช้ต�วัพิาราม�เตอร&ของเมที่ธอดกลไกก�รทำ��ง�น Pass by value เป้1น้วั�ธ ที่ �น้�ยมใช้ก�น้มากที่ �ส�ด เมที่ธอดที่ �คื�น้คื*า จะม ป้ระโยช้น้&ก�บการส*งออกเพิ ยงต�วัเด ยวั การใช้ ref และ out น้�ยมใช้ก�บการคื�น้คื*าหลายคื*า ใช้เพิ ยง ref ถุาขอม�ลม การส*งคื*าที่� งสองที่าง

ป็ระสั'ทำธ'ภ�พ โดยที่��วัไป้ป้ระส�ที่ธ�ภาพิของ pass by value ม มากที่ �ส�ด

C# Programming with Visual C# 2010 Express 26

Page 25: 6. Method

การใช้เมที่ธอดเร ยกต�วัเอง (Recursive) เมที่ธอดที่ �เร ยกต�วัเอง

โดยตรง โดยออม

ม ป้ระโยช้น้&ก�บโคืรงสรางป้:ญ่หาที่ �ซ์�บซ์อน้

C# Programming with Visual C# 2010 Express 27

static ulong Fibonacci(ulong n){ if (n <= 2) return 1; else return Fibonacci(n-1) + Fibonacci(n-2);}

Page 26: 6. Method

สร�ป้ที่ายบที่บที่น้ เราไดเร ยน้ร� การสรางเมธอด การใช้งาน้เมธอด การ

ที่+าโอเวัอร&โหลด กฎเกณีฑ์& การสรางเมธอดใน้ล�กษณีะต*างๆ โดยเฉพิาะเร��อง การสรางต�วัแป้รเขา หร�อพิาราม�เตอร&ใน้ล�กษณีะ ไดน้าม�กของอะเรย& ไดน้าม�กของที่างเล�อก การระบ�ช้��อต�วัแป้ร ใน้กรณี ที่ �ไม*เร ยงล+าด�บต�วัแป้รเขา กลไกการที่+างาน้ของต�วัแป้รเขา แบบที่+าส+าเน้าเขา แบบอางอ�งต�แป้รเขา และแบบอางอ�งภายน้อกอย*างเด ยวั รวัมที่� งเมธอดเร ยกต�วัเองส+าหร�บโคืรงสรางป้:ญ่หาที่ �ซ์�บซ์อน้

C# Programming with Visual C# 2010 Express 28

Page 27: 6. Method

คื+าถุามที่บที่วัน้1 . เมธอดอาจเร ยกไดหลายช้��อ ช้��อเหล*าน้� น้คื�ออะไรไดบาง2 . ม เหต�ผ่ลอะไรที่ �ตองสรางสเตต�กเมธอด และอ�น้สแตที่ซ์&เมธอด3 . ม เหต�ผ่ลอะไรที่ �จะตองที่+าโอเวัอร&โหลดเมธอด4. ใหเข ยน้รายการล�กษณีะต�วัแป้รเขาที่ �ที่+าโอเวัอร&โหลดไดบาง5. ใช้คื ย&เวั�ร&ดอะไรใน้การสรางต�วัแป้รเขาแบบไดน้าม�กดวัยอะเรย&6. ม เหต�ผ่ลอะไรที่ �ซ์ ช้าร&ป้ตองสรางต�วัแป้รที่างเล�อก7. ใน้กรณี ที่ �ใช้การะบ�ช้��อต�วัแป้รเขาที่�กต�วั ยกเวัน้ต�วัแป้รที่างเล�อก ใน้

การเร ยกใช้งาน้เมธอดที่ �ต�วัแป้รที่างเล�อก คื*าต�วัแป้รที่างเล�อกจะม คื*าเป้1น้อะไร

8. ม ข� น้ตอน้อะไรบางใน้การสรางเมธอดอ�ตโน้ม�ต�

C# Programming with Visual C# 2010 Express 29

Page 28: 6. Method

คื+าถุามที่บที่วัน้9. จากโคืดต*อไป้น้ เม��อเร ยกเมธอด OutMethod( ) จะเก�ดอะไรข5 น้

static void OutMethod(out int p){ p = 1;}static void Main(string[] args){

int p; OutMethod(out 1); Console.WriteLine(p); Console.Read();}1 0 .ช้น้�ดต�วัแป้รเขาม ก �ช้น้�ด จ+าแน้กตามกลไกการส*งต�วัแป้ร1 1 .ป้ระส�ที่ธ�ภาพิใน้การใช้ต�วัแป้รโดยที่��วัไป้ ใช้ช้น้�ดขอม�ลของต�วัแป้ร

เขาเป้1น้อะไรจะด ที่ �ส�ด1 2 .เมธอดเร ยกต�วัเอง หร�อร เคือร&ซ์ พิ จ+าเป้1น้ตองม การจ�ดหย�ดของ

การที่+างาน้หร�อไม* และเพิราะอะไรC# Programming with Visual C# 2010 Express 30

Page 29: 6. Method

Lab การสรางและใช้งาน้เมที่ธอด1 .การใช้พิาราม�เตอร&ใน้เมที่ธอดที่ �ส*งคื*าคื�อ2. การสรางเมที่ธอดก�บพิาราม�เตอร&อางอ�ง3. การใช้เมที่ธอด ร เคือร&ช้��น้

C# Programming with Visual C# 2010 Express 31