Upload
druce
View
30
Download
0
Embed Size (px)
DESCRIPTION
6. Method. เมธอดคือหน้าที่การงานของวัตถุให้เรียกใช้. เป้าหมายการเรียนรู้. การนิยามเมทธอด ทั้งสเตติก และอินสแตทซ์เมทธอด เมทธอดโอเวอร์โหลด การใช้ตัวแปรเข้าแบบไดนามิกด้วยอะเรย์ ตัวแปรท้องถิ่น ในเมธอด การคืนค่าในเมธอด ตัวแปรทางเลือกของเมทธอด การเรียกเมทธอดด้วยการระบุชื่อตัวแปร - PowerPoint PPT Presentation
Citation preview
Visual C# 2010 Express
6. Method
เมธอดคื�อหน้าที่ �การงาน้ของวั�ตถุ�ใหเร ยกใช้
1C# Programming with Visual C# 2010 Express
เป้�าหมายการเร ยน้ร� การน้�ยามเมที่ธอด ที่� งสเตต�ก และอ�น้สแตที่ซ์&เมที่ธอด เมที่ธอดโอเวัอร&โหลด การใช้ต�วัแป้รเขาแบบไดน้าม�กดวัยอะเรย& ต�วัแป้รที่องถุ��น้ ใน้เมธอด การคื�น้คื*าใน้เมธอด ต�วัแป้รที่างเล�อกของเมที่ธอด การเร ยกเมที่ธอดดวัยการระบ�ช้��อต�วัแป้ร การสรางเมที่ธอดอ�ตโน้ม�ต� กลไกการส*งต�วัแป้ร และ แน้วัที่างการใช้ต�วัแป้ร การใหเมที่ธอดเร ยกใช้ต�วัเอง
2C# Programming with Visual C# 2010 Express
อะไรคื�อเมธอดเมที่ธอดคื�อกล�*มของคื+าส��ง ภาษาสม�ยใหม*ที่�กต�วัใช้
แน้วัคื�ดเด ยวัก�น้น้ เราอาจคื�ดเป้ร ยบเที่ ยบไดวั*า เมที่ธอดก/คื�อ
Function, Subroutine, Procedure, Subprogram
เราจะส�งเกตไดง*ายๆ วั*าอะไรเป้1น้เมที่ธอด เมที่ธอดจะม เคืร��องหมาย วังเล/บ “( )” ต*อที่ายช้��อเมที่ธอด
C# Programming with Visual C# 2010 Express 3
เมธอด 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
การน้�ยามเมที่ธอด การต� งช้��อ ช้��อไม*คืวัรเร��มตน้ดวัย ข ดล*าง คืวัรใช้อ�กษรพิ�มพิ&
ใหญ่*น้+าหน้า และคืวัรเป้1น้คื+ากร�ยา การใช้ต�วัแป้รเขา จ+าน้วัน้ต�วัแป้รม เที่*าไหร*ก/ได ต�วัแป้รเขาแต*ละ
ต�วัจะก+าหน้ดช้น้�ดขอม�ลของต�วัแป้รเขาดวัย และจะไม*ม ต�วัแป้รเขาเลยก/ได
ที่�กคื+าส��งภายใน้เมธอด จะตองอย�*ภายใน้เคืร��องหมายป้4กกา ถุ5งแมจะคื+าส��งเด ยวัก/ตาม
เมธอดที่ �ม การคื�น้คื*า ระบ�ช้น้�ดขอม�ลการคื�น้คื*าก*อน้ช้��อเมที่ธอด และการคื�น้คื*าเป้1น้ช้น้�ดขอม�ลอะไรจะตองม คื+าส��ง return ภายใน้ส*วัน้เมธอด
เมธอดใดไม*คื�น้คื*าช้น้�ดขอม�ลอะไร ใหใช้การคื�น้คื*าเป้1น้ void
C# Programming with Visual C# 2010 Express 5
การเร ยกใช้เมธอด การเร ยกเมธอด ที่+าไดโดยการเร ยกช้��อเมธอดแลวัตามดวัย
ต�วัแป้รเขาใหตรงก�บที่ �ไดน้�ยามไวั หร�อไม*ตองม ต�วัแป้รเขาใน้กรณี ที่ �ไม*ไดน้�ยามต�วัแป้รเขาไวั แต*ย�งคืงตองม วังเล/บวั*างไวั ด�งน้� น้แลวัจะตองม วังเล/บเสมอ
การเร ยกเมธอดจากคืลาสอ��น้ กรณี เป้1น้ static method ที่+าไดโดยการเร ยกช้��อคืลาส
แลวัตามดวัยช้��อเมธอดที่ �ตองการของคืลาสน้� น้ กรณี ไม*เป้1น้ static method ที่+าไดโดยการเร ยกช้��อ
instance แลวัตามดวัยช้��อเม*ธอด
C# Programming with Visual C# 2010 Express 6
การเร ยกเมธอดจากต*างคืลาส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
การคื�น้คื*าของเมที่ธอด การป้ระกาศเมที่ธอดเป้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;}
การใช้คื+าส��ง 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");
การใช้ต�วัแป้รที่องถุ��น้ (Local Variable) ต�วัแป้รที่องถุ��น้
สรางภายใน้เมที่ธอด เป้1น้ของเมที่ธอดใช้ หายไป้เม��อเมที่ธอดจบการที่+างาน้
ต�วัแป้รที่ �ใช้ร*วัมก�น้ใน้เมที่ธอด ตองเป้1น้ต�วัแป้รระด�บสมาช้�กของคืลาส
ขอบเขตต�วัแป้รข�ดก�น้ ต�วัแป้รที่องถุ��น้ก�บต�วัแป้รระด�บสมาช้�กของคืลาสที่ �ใช้ช้��อเหม�อน้ก�น้
C# Programming with Visual C# 2010 Express 10
การป้ระกาศและเร ยกใช้ต�วัพิาราม�เตอร& การป้ระกาศต�วัพิาราม�เตอร&
วัางใน้วังเล/บหล�งช้��อเมที่ธอด ก+าหน้ดช้น้�ดขอม�ลและช้��อต�วัพิาราม�เตอร&
การเร ยกเมที่ธอดก�บต�วัพิาราม�เตอร& เร ยกช้��อและตามดวัยช้น้�ดต�วัพิาราม�เตอร&ใหคืรบจ+าน้วัน้
C# Programming with Visual C# 2010 Express 12
ต�วอย��งก�รใช้�static void MethodWithParameters(int n, string y){ ... }ต�วอย��งก�รเร!ยกMethodWithParameters(2, "Hello, world“);
เมที่ธอดโอเวัอร&โหลด (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;}
ล�กษณีะโอเวัอร&โหลดที่ �ที่+าได 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; }}
ต�วัแป้รที่างเล�อกของเมธอด การที่+าโอเวัอร&โหลดไม*เพิ ยงพิอที่ �สน้�บสน้�น้การที่+างาน้แบบน้
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
การสรางต�วัแป้รที่างเล�อก
เราสรางต�วัแป้รที่างเล�อกที่ �ม การที่+าโอเวัอร&โหลดไป้ดวัย เราจะใส*ต�วัแป้ร 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}
การเร ยกเมธอดดวัยการระบ�ช้��อต�วัแป้ร น้อกจากการใส*ต�วัแป้ร และช้น้�ดต�วัแป้รตามล+าด�บของการ
ก+าหน้ดเมธอดแลวั ซ์ ช้าร&ป้ ย�งย�ดหย�*น้ไดอ ก ดวัยการใส*ต�วัแป้ร และช้น้�ดต�วัแป้ร ไม*ตองตามล+าด�บได ดวัยการก+าหน้ดช้��อต�วัแป้รเขาใน้การเร ยกใช้งาน้ ด�งต�วัอย*างต*อไป้น้
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. }
การสรางเมธอดอ�ตโน้ม�ต� (Refactoring Code)
C# Programming with Visual C# 2010 Express 18
การใช้ Refactor เพิ��อสรางเมธอดอ�ตโน้ม�ต� ที่+าใหการเข ยน้โป้รแกรมสะดวัก และที่+าใหการด�แลร�กษา ป้ร�บแต*งโป้รแกรมง*ายข5 น้
กลไกการส*งต�วัแป้ร ร�ป้แบบการส*งผ่*าน้ต�วัแป้รม อย�*สามแบบคื�อ1 .การส*งต�วัแป้รเขา (By Value) การส*งแบบน้ บางที่ ก/เร ยก in ซ์5�ง
เป้1น้คื*าป้ร�ยาย (ไม*ใส*คื+าวั*า in ) ต�วัแป้รน้ จะที่+าส+าเน้าต�วัแป้รเขามา จะม ผ่ลเฉพิาะต�วัแป้รภายใน้เมธอดเที่*าน้� น้ ส*วัน้ใหญ่*การใน้การเข ยน้โป้รแกรมจะใช้การส*งต�วัแป้รเขาแบบน้ ซ์5�งที่ �ผ่*าน้มาเราก/ใช้แบบน้ ที่� งหมด
2. การส*งต�วัแป้รโดยการอางอ�ง (By Reference) การส*งแบบน้ ไม*ม การที่+าส+าเน้าต�วัแป้รต�น้ที่างแต*จะใช้การอางอ�งแที่น้ ด�งน้ การเป้ล �ยน้แป้ลงต�วัแป้รน้ จ5งม ผ่ลต*อต�วัแป้รตน้ที่าง หร�อเร ยกวั*า ม in และ out
3. การส*งต�วัแป้รออก หร�อเร ยกวั*า out เพิราะต�วัแป้รน้ ม ผ่ลต*อต�วัแป้รภายน้อก แต*ไม*ม ผ่ลต*อต�วัแป้ร ภายใน้เมธอด
C# Programming with Visual C# 2010 Express 19
ต�วัอย*างการใช้ต�วัแป้ร 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
ต�วัอย*างการใช้ต�วัแป้รเขาแบบอางอ�ง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
ต�วัอย*างการใช้ต�วัแป้ร 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
การใช้ต�วัแป้รเขาแบบไดน้าม�กดวัยอะเรย& ใน้บางคืร� งเม��อตองการใหต�วัแป้รเขา หลายต�วั การใช้เมธอด
โอเวัอร&โหลด จ+าน้วัน้ที่ �ม ต�วัเขาต*างๆ จะที่+าใหม เมธอดโอเวัอร&โหลดจ+าน้วัน้มาก เก�น้ไป้
การแกป้:ญ่หาน้ แกไดดวัยการที่+า ใหม ต�วัแป้รเขาแบบไดน้าม�ก ใช้คื ย&เวั�ร&ด 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);}
เง��อน้ไขการใช้ต�วัแป้รเขาแบบไดน้าม�ก ม เพิ ยงหน้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.}
แน้วัที่างการใช้ต�วัพิาราม�เตอร&ของเมที่ธอดกลไกก�รทำ��ง�น Pass by value เป้1น้วั�ธ ที่ �น้�ยมใช้ก�น้มากที่ �ส�ด เมที่ธอดที่ �คื�น้คื*า จะม ป้ระโยช้น้&ก�บการส*งออกเพิ ยงต�วัเด ยวั การใช้ ref และ out น้�ยมใช้ก�บการคื�น้คื*าหลายคื*า ใช้เพิ ยง ref ถุาขอม�ลม การส*งคื*าที่� งสองที่าง
ป็ระสั'ทำธ'ภ�พ โดยที่��วัไป้ป้ระส�ที่ธ�ภาพิของ pass by value ม มากที่ �ส�ด
C# Programming with Visual C# 2010 Express 26
การใช้เมที่ธอดเร ยกต�วัเอง (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);}
สร�ป้ที่ายบที่บที่น้ เราไดเร ยน้ร� การสรางเมธอด การใช้งาน้เมธอด การ
ที่+าโอเวัอร&โหลด กฎเกณีฑ์& การสรางเมธอดใน้ล�กษณีะต*างๆ โดยเฉพิาะเร��อง การสรางต�วัแป้รเขา หร�อพิาราม�เตอร&ใน้ล�กษณีะ ไดน้าม�กของอะเรย& ไดน้าม�กของที่างเล�อก การระบ�ช้��อต�วัแป้ร ใน้กรณี ที่ �ไม*เร ยงล+าด�บต�วัแป้รเขา กลไกการที่+างาน้ของต�วัแป้รเขา แบบที่+าส+าเน้าเขา แบบอางอ�งต�แป้รเขา และแบบอางอ�งภายน้อกอย*างเด ยวั รวัมที่� งเมธอดเร ยกต�วัเองส+าหร�บโคืรงสรางป้:ญ่หาที่ �ซ์�บซ์อน้
C# Programming with Visual C# 2010 Express 28
คื+าถุามที่บที่วัน้1 . เมธอดอาจเร ยกไดหลายช้��อ ช้��อเหล*าน้� น้คื�ออะไรไดบาง2 . ม เหต�ผ่ลอะไรที่ �ตองสรางสเตต�กเมธอด และอ�น้สแตที่ซ์&เมธอด3 . ม เหต�ผ่ลอะไรที่ �จะตองที่+าโอเวัอร&โหลดเมธอด4. ใหเข ยน้รายการล�กษณีะต�วัแป้รเขาที่ �ที่+าโอเวัอร&โหลดไดบาง5. ใช้คื ย&เวั�ร&ดอะไรใน้การสรางต�วัแป้รเขาแบบไดน้าม�กดวัยอะเรย&6. ม เหต�ผ่ลอะไรที่ �ซ์ ช้าร&ป้ตองสรางต�วัแป้รที่างเล�อก7. ใน้กรณี ที่ �ใช้การะบ�ช้��อต�วัแป้รเขาที่�กต�วั ยกเวัน้ต�วัแป้รที่างเล�อก ใน้
การเร ยกใช้งาน้เมธอดที่ �ต�วัแป้รที่างเล�อก คื*าต�วัแป้รที่างเล�อกจะม คื*าเป้1น้อะไร
8. ม ข� น้ตอน้อะไรบางใน้การสรางเมธอดอ�ตโน้ม�ต�
C# Programming with Visual C# 2010 Express 29
คื+าถุามที่บที่วัน้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
Lab การสรางและใช้งาน้เมที่ธอด1 .การใช้พิาราม�เตอร&ใน้เมที่ธอดที่ �ส*งคื*าคื�อ2. การสรางเมที่ธอดก�บพิาราม�เตอร&อางอ�ง3. การใช้เมที่ธอด ร เคือร&ช้��น้
C# Programming with Visual C# 2010 Express 31