1 / 29

6. Method

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

druce
Download Presentation

6. Method

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 6. Method เมธอดคือหน้าที่การงานของวัตถุให้เรียกใช้ C# Programming with Visual C# 2010 Express

  2. เป้าหมายการเรียนรู้ • การนิยามเมทธอด ทั้งสเตติก และอินสแตทซ์เมทธอด • เมทธอดโอเวอร์โหลด • การใช้ตัวแปรเข้าแบบไดนามิกด้วยอะเรย์ • ตัวแปรท้องถิ่น ในเมธอด • การคืนค่าในเมธอด • ตัวแปรทางเลือกของเมทธอด • การเรียกเมทธอดด้วยการระบุชื่อตัวแปร • การสร้างเมทธอดอัตโนมัติ • กลไกการส่งตัวแปร และ แนวทางการใช้ตัวแปร • การให้เมทธอดเรียกใช้ตัวเอง C# Programming with Visual C# 2010 Express

  3. อะไรคือเมธอด เมทธอดคือกลุ่มของคำสั่ง ภาษาสมัยใหม่ทุกตัวใช้แนวคิดเดียวกันนี้ เราอาจคิดเปรียบเทียบได้ว่า เมทธอดก็คือ • Function, • Subroutine, • Procedure, • Subprogram เราจะสังเกตได้ง่ายๆ ว่าอะไรเป็นเมทธอด เมทธอดจะมีเครื่องหมาย วงเล็บ “( )” ต่อท้ายชื่อเมทธอด C# Programming with Visual C# 2010 Express

  4. เมธอด Main( ) • class Program • { • static void Main(string[] args) • { • Console.WriteLine( “OK”); • CheckEmpty( ); • }  • private static void CheckEmpty() • { } • } สังเกตไหม เมธอด ทำไมต้องเป็น static ด้วย ศึกษาต่อไป ก็จะตอบคำถามนี้ได้ C# Programming with Visual C# 2010 Express

  5. การนิยามเมทธอด • การตั้งชื่อ ชื่อไม่ควรเริ่มต้นด้วย ขีดล่าง ควรใช้อักษรพิมพ์ใหญ่นำหน้า และควรเป็นคำกริยา • การใช้ตัวแปรเข้า จำนวนตัวแปรมีเท่าไหร่ก็ได้ ตัวแปรเข้าแต่ละตัวจะกำหนดชนิดข้อมูลของตัวแปรเข้าด้วย และจะไม่มีตัวแปรเข้าเลยก็ได้ • ทุกคำสั่งภายในเมธอด จะต้องอยู่ภายในเครื่องหมายปีกกา ถึงแม้จะคำสั่งเดียวก็ตาม • เมธอดที่มีการคืนค่า ระบุชนิดข้อมูลการคืนค่าก่อนชื่อเมทธอด และการคืนค่าเป็นชนิดข้อมูลอะไรจะต้องมีคำสั่ง return ภายในส่วนเมธอด • เมธอดใดไม่คืนค่าชนิดข้อมูลอะไร ให้ใช้การคืนค่าเป็น void C# Programming with Visual C# 2010 Express

  6. การเรียกใช้เมธอด • การเรียกเมธอด ทำได้โดยการเรียกชื่อเมธอดแล้วตามด้วยตัวแปรเข้าให้ตรงกับที่ได้นิยามไว้ หรือไม่ต้องมีตัวแปรเข้าในกรณีที่ไม่ได้นิยามตัวแปรเข้าไว้ แต่ยังคงต้องมีวงเล็บว่างไว้ ดังนั้นแล้วจะต้องมีวงเล็บเสมอ • การเรียกเมธอดจากคลาสอื่น • กรณี เป็น static method ทำได้โดยการเรียกชื่อคลาสแล้วตามด้วยชื่อเมธอดที่ต้องการของคลาสนั้น • กรณี ไม่เป็น static method ทำได้โดยการเรียกชื่อ instance แล้วตามด้วยชื่อเม่ธอด C# Programming with Visual C# 2010 Express

  7. การเรียกเมธอดจากต่างคลาสการเรียกเมธอดจากต่างคลาส • class Program { • public static void main( String[ ] args) • { • Example ex = new Example( ); • // ต้องสร้างเป็น Instance ก่อน จึงเรียกเมธอด ผ่านชื่อ instance • ex.C( ); • Example. D( ); // เรียกผ่านชื่อคลาสได้เลย • } • } • Class Example • { • public int C( ) { } • public static int D ( ) { } • } C# Programming with Visual C# 2010 Express

  8. การคืนค่าของเมทธอด • การประกาศเมทธอดเป็นชนิดไม่มี void • เมทธอดชนิดไม่มี void จะต้องมีการคืนค่าเสมอ • การเพิ่มคำสั่งคืนค่าด้วย return static int TwoPlusTwo( ) { int a,b; a = 2; b = 2; return a + b; } C# Programming with Visual C# 2010 Express

  9. การใช้คำสั่ง Return • Return ทันที • Return แบบมีเงื่อนไข 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"); C# Programming with Visual C# 2010 Express

  10. การใช้ตัวแปรท้องถิ่น (Local Variable) • ตัวแปรท้องถิ่น • สร้างภายในเมทธอด • เป็นของเมทธอดใช้ • หายไปเมื่อเมทธอดจบการทำงาน • ตัวแปรที่ใช้ร่วมกันในเมทธอด • ต้องเป็นตัวแปรระดับสมาชิกของคลาส • ขอบเขตตัวแปรขัดกัน • ตัวแปรท้องถิ่นกับตัวแปรระดับสมาชิกของคลาสที่ใช้ชื่อเหมือนกัน C# Programming with Visual C# 2010 Express

  11. การประกาศและเรียกใช้ตัวพารามิเตอร์การประกาศและเรียกใช้ตัวพารามิเตอร์ • การประกาศตัวพารามิเตอร์ • วางในวงเล็บหลังชื่อเมทธอด • กำหนดชนิดข้อมูลและชื่อตัวพารามิเตอร์ • การเรียกเมทธอดกับตัวพารามิเตอร์ • เรียกชื่อและตามด้วยชนิดตัวพารามิเตอร์ให้ครบจำนวน ตัวอย่างการใช้ static void MethodWithParameters(int n, string y){ ... } ตัวอย่างการเรียก MethodWithParameters(2, "Hello, world“); C# Programming with Visual C# 2010 Express

  12. เมทธอดโอเวอร์โหลด (overload) • คือเมทธอดที่มีชื่อเหมือนกับภายในคลาส • มีเป้าหมายเพื่อให้ตอบสนองต่างกัน ในชื่อเมธอดเดียวกัน ตามความเหมาะสมที่จะสนับสนันการเรียกใช้งาน เช่น มีข้อมูลตัวแปรที่ส่งเข้าเมธอด ไม่เหมือนกัน • ความแตกต่างอยู่ที่รายการตัวพารามิเตอร์ของเมทธอด • การเรียกใช้เมทธอด ต้องระบุรายการพารามิเตอร์ให้ตรงกับที่นิยามไว้ static int Add(int a, int b){ return a + b; } static int Add(int a, int b, int c){ return a + b + c; } C# Programming with Visual C# 2010 Express

  13. ลักษณะโอเวอร์โหลดที่ทำได้ลักษณะโอเวอร์โหลดที่ทำได้ • Signature เป็นรายการพารามิเตอร์ของเมทธอดที่ต้องไม่มีซ้ำกันของการทำโอเวอร์โหลดเมทธอด ดังมีความต่างคือ • ชนิดตัวแปรไม่เหมือนกัน • จำนวนตัวแปรไม่เท่ากัน • ลำดับตัวแปรไม่เหมือนกัน(ดูที่ชนิดตัวแปร) • Signature ไม่รวมชื่อตัวพารามิเตอร์ การคืนค่าของเมทธอด • แต่การคืนค่าต้องเหมือนกัน 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; } } C# Programming with Visual C# 2010 Express

  14. ตัวแปรทางเลือกของเมธอดตัวแปรทางเลือกของเมธอด • การทำโอเวอร์โหลดไม่เพียงพอที่สนับสนุนการทำงานแบบนี้void OptionalPara(int x1, float x2){ ทำงานอย่างแบบ1}void OptionalPara(int x1, int x2, float x3) { ทำงานอย่างแบบ2} void OptionalPara(int x1, float x3) // ทำไม่ได้ { ทำงานอย่างแบบ3} • ซีชาร์ปสนับสนุนการใช้เป็นแปรที่ให้เลือกให้ใส่ได้ ไม่ใส่ก็ได้ (ที่เรียกชื่อว่าทางเลือกมาจากคำว่า Option) แต่ยังคงทำงานได้ C# Programming with Visual C# 2010 Express

  15. การสร้างตัวแปรทางเลือกการสร้างตัวแปรทางเลือก • เราสร้างตัวแปรทางเลือกที่มีการทำโอเวอร์โหลดไปด้วย เราจะใส่ตัวแปร 2 ตัว หรือ 3 ตัวก็ได้ และสังเกตด้วยว่า เมธอดสุดท้ายมีตัวแปรเข้า 3 ตัว มีการกำหนดค่าให้ตัวแปรสุดท้าย = 0.0F แต่ในการทำงานจริงสามารถเปลี่ยนค่าเป็น 10.0F ได้ • สำหรับการไม่ใส่ตัวแปรที่ 3 เมธอดนี้จะกำหนดค่าปริยายให้ โดยสามารถใส่เงื่อนไขได้ • ต้องให้ตัวแปรทางเลือกอยู่ในลำดับสุดท้ายเท่านั้น void OptionalPara(int x1, float x2) { ทำงานอย่างแบบ1} void OptionalPara(int x1, int x2, float x3) { ทำงานอย่างแบบ2} void OptionalPara(int x1, float x2, float x3 = 0.0F) { ทำงานอย่างแบบ3} C# Programming with Visual C# 2010 Express

  16. การเรียกเมธอดด้วยการระบุชื่อตัวแปรการเรียกเมธอดด้วยการระบุชื่อตัวแปร • นอกจากการใส่ตัวแปร และชนิดตัวแปรตามลำดับของการกำหนดเมธอดแล้ว ซีชาร์ป ยังยืดหยุ่นได้อีก ด้วยการใส่ตัวแปร และชนิดตัวแปร ไม่ต้องตามลำดับได้ ด้วยการกำหนดชื่อตัวแปรเข้าในการเรียกใช้งาน ดังตัวอย่างต่อไปนี้ static void Main(string[] args) { OptionalPara(x1: 1, x3: 10.0F, x2:2.0F); Console.ReadKey(); } static void OptionalPara(int x1, float x2, float x3 = 0.0F) { Console.WriteLine("Optional3Para"); Console.WriteLine("x1:{0}", x1); Console.WriteLine("x2:{0}", x2); if (x3!=0.0) Console.WriteLine("x3:{0}", x3); } C# Programming with Visual C# 2010 Express

  17. การสร้างเมธอดอัตโนมัติ (Refactoring Code) การใช้ Refactor เพื่อสร้างเมธอดอัตโนมัติ ทำให้การเขียนโปรแกรมสะดวก และทำให้การดูแลรักษา ปรับแต่งโปรแกรมง่ายขึ้น C# Programming with Visual C# 2010 Express

  18. กลไกการส่งตัวแปร • รูปแบบการส่งผ่านตัวแปรมีอยู่สามแบบคือ • การส่งตัวแปรเข้า (By Value) การส่งแบบนี้บางทีก็เรียก in ซึ่งเป็นค่าปริยาย (ไม่ใส่คำว่า in) ตัวแปรนี้จะทำสำเนาตัวแปรเข้ามา จะมีผลเฉพาะตัวแปรภายในเมธอดเท่านั้น ส่วนใหญ่การในการเขียนโปรแกรมจะใช้การส่งตัวแปรเข้าแบบนี้ ซึ่งที่ผ่านมาเราก็ใช้แบบนี้ทั้งหมด • การส่งตัวแปรโดยการอ้างอิง (By Reference) การส่งแบบนี้ไม่มีการทำสำเนาตัวแปรตันทางแต่จะใช้การอ้างอิงแทน ดังนี้การเปลี่ยนแปลงตัวแปรนี้จึงมีผลต่อตัวแปรต้นทาง หรือเรียกว่า มี in และ out • การส่งตัวแปรออก หรือเรียกว่า out เพราะตัวแปรนี้ มีผลต่อตัวแปรภายนอก แต่ไม่มีผลต่อตัวแปร ภายในเมธอด C# Programming with Visual C# 2010 Express

  19. ตัวอย่างการใช้ตัวแปร By Value • static void AddOne(int x) • { • x++; // Increment x • } • static void Main( ) • { • int k = 6; • AddOne(k); • Console.WriteLine(k); // Display the value 6, not 7 • } C# Programming with Visual C# 2010 Express

  20. ตัวอย่างการใช้ตัวแปรเข้าแบบอ้างอิงตัวอย่างการใช้ตัวแปรเข้าแบบอ้างอิง • static void Main(string[] args){ • inti = 6; int j = 6; • AddRefOneValueOne(ref i, j); • Console.WriteLine("{0}, {1}", i,j); • // Display the value 7, 6 • Console.ReadKey(); • } • static void AddRefOneValueOne(ref int x, int y){ • x++; • y++; • } C# Programming with Visual C# 2010 Express

  21. ตัวอย่างการใช้ตัวแปร out • static void OutMethod(out int p){ • p = 1; • } • static void Main(string[] args){ • int p= 2; • OutMethod(out p); • Console.WriteLine(p);// Display 1 • Console.Read(); • } C# Programming with Visual C# 2010 Express

  22. การใช้ตัวแปรเข้าแบบไดนามิกด้วยอะเรย์การใช้ตัวแปรเข้าแบบไดนามิกด้วยอะเรย์ • ในบางครั้งเมื่อต้องการให้ตัวแปรเข้า หลายตัว การใช้เมธอดโอเวอร์โหลด จำนวนที่มีตัวเข้าต่างๆ จะทำให้มีเมธอดโอเวอร์โหลดจำนวนมาก เกินไป • การแก้ปัญหานี้แก้ได้ด้วยการทำ ให้มีตัวแปรเข้าแบบไดนามิกใช้คีย์เวิร์ด params • ประกาศเป็นอาร์เรย์ ส่งผ่านบบ การส่งตัวพารามิเตอร์เข้า 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); } C# Programming with Visual C# 2010 Express

  23. เงื่อนไขการใช้ตัวแปรเข้าแบบไดนามิกเงื่อนไขการใช้ตัวแปรเข้าแบบไดนามิก • มีเพียงหนึ่ง params ต่อหนึ่งเมธอด • วางได้ที่ตำแหน่งท้ายสุดของตัวแปร • มีเพียงอะเรย์หนึ่งมิติเท่านั้น static void Main(string[] args) { Console.WriteLine(Accumulate("total:", 1, 2, 3, 4)); //print total:10 Console.ReadKey(); } public static string Accumulate(string print, params int[] value ) { int sum = 0; foreach (var item in value) { sum += item; } return print + Convert.ToString(sum); } C# Programming with Visual C# 2010 Express

  24. แนวทางการใช้ตัวพารามิเตอร์ของเมทธอดแนวทางการใช้ตัวพารามิเตอร์ของเมทธอด กลไกการทำงาน • Pass by value เป็นวิธีที่นิยมใช้กันมากที่สุด • เมทธอดที่คืนค่า จะมีประโยชน์กับการส่งออกเพียงตัวเดียว • การใช้ ref และ out นิยมใช้กับการคืนค่าหลายค่า • ใช้เพียง ref ถ้าข้อมูลมีการส่งค่าทั้งสองทาง ประสิทธิภาพ • โดยทั่วไปประสิทธิภาพของ pass by value มีมากที่สุด C# Programming with Visual C# 2010 Express

  25. การใช้เมทธอดเรียกตัวเอง (Recursive) • เมทธอดที่เรียกตัวเอง • โดยตรง • โดยอ้อม • มีประโยชน์กับโครงสร้างปัญหาที่ซับซ้อน 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

  26. สรุปท้ายบท บทนี้เราได้เรียนรู้การสร้างเมธอด การใช้งานเมธอด การทำโอเวอร์โหลด กฎเกณฑ์ การสร้างเมธอดในลักษณะต่างๆ โดยเฉพาะเรื่อง การสร้างตัวแปรเข้า หรือพารามิเตอร์ในลักษณะ ไดนามิกของอะเรย์ ไดนามิกของทางเลือก การระบุชื่อตัวแปร ในกรณีที่ไม่เรียงลำดับตัวแปรเข้า กลไกการทำงานของตัวแปรเข้า แบบทำสำเนาเข้า แบบอ้างอิงตัแปรเข้า และแบบอ้างอิงภายนอกอย่างเดียว รวมทั้งเมธอดเรียกตัวเองสำหรับโครงสร้างปัญหาที่ซับซ้อน C# Programming with Visual C# 2010 Express

  27. คำถามทบทวน • เมธอดอาจเรียกได้หลายชื่อ ชื่อเหล่านั้นคืออะไรได้บ้าง • มีเหตุผลอะไรที่ต้องสร้างสเตติกเมธอด และอินสแตทซ์เมธอด • มีเหตุผลอะไรที่จะต้องทำโอเวอร์โหลดเมธอด • ให้เขียนรายการลักษณะตัวแปรเข้าที่ทำโอเวอร์โหลดได้บ้าง • ใช้คีย์เวิร์ดอะไรในการสร้างตัวแปรเข้าแบบไดนามิกด้วยอะเรย์ • มีเหตุผลอะไรที่ซีชาร์ปต้องสร้างตัวแปรทางเลือก • ในกรณีที่ใช้การะบุชื่อตัวแปรเข้าทุกตัว ยกเว้นตัวแปรทางเลือก ในการเรียกใช้งานเมธอดที่ตัวแปรทางเลือก ค่าตัวแปรทางเลือกจะมีค่าเป็นอะไร • มีขั้นตอนอะไรบ้างในการสร้างเมธอดอัตโนมัติ C# Programming with Visual C# 2010 Express

  28. คำถามทบทวน • จากโค้ดต่อไปนี้ เมื่อเรียกเมธอด OutMethod( ) จะเกิดอะไรขึ้น static void OutMethod(out int p){ p = 1;} static void Main(string[] args){ int p; OutMethod(out 1); Console.WriteLine(p); Console.Read(); } • ชนิดตัวแปรเข้ามีกี่ชนิด จำแนกตามกลไกการส่งตัวแปร • ประสิทธิภาพในการใช้ตัวแปรโดยทั่วไป ใช้ชนิดข้อมูลของตัวแปรเข้าเป็นอะไรจะดีที่สุด • เมธอดเรียกตัวเอง หรือรีเคอร์ซีพ จำเป็นต้องมีการจุดหยุดของการทำงานหรือไม่ และเพราะอะไร C# Programming with Visual C# 2010 Express

  29. Lab การสร้างและใช้งานเมทธอด • การใช้พารามิเตอร์ในเมทธอดที่ส่งค่าคือ • การสร้างเมทธอดกับพารามิเตอร์อ้างอิง • การใช้เมทธอด รีเคอร์ชั่น C# Programming with Visual C# 2010 Express

More Related