ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
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)
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 A { static void Main(string[] args) { B.Method_b1( ); // static method เรียก static method ด้วยกันได้ B b = new B( ); // static method เรียก non static method ต้องสร้างเป็น object ก่อน b.Method_b2( ); } class B { public static void Method_b1( ) { Console.WriteLine("This is Method_b1 in class B"); public void Method_b2( ) { Console.WriteLine("This is Method_b2 in class B"); C# Programming with Visual C# 2010 Express
8
เมธอดโอเวอร์โหลด (Overload Method)
หมายถึงภายในคลาสเดียวกัน มีชื่อเมธอดเหมือนกันได้ แต่มี Signature ต่างกัน ซึ่งหมายถึง มีตัวแปรเข้า ออก ไปไม่เหมือนกัน มีเป้าหมายเพื่อให้ตอบสนองต่างกัน ในชื่อเมธอดเดียวกัน ตามความเหมาะสมที่จะสนับสนันการเรียกใช้งาน เช่น มี ข้อมูลตัวแปรที่ส่งเข้าเมธอด ไม่เหมือนกัน ตัวอย่างเช่น เมธอด WriteLine( ) มีการทำโอเวอร์โหลด ได้ถึง 19 แบบ เพื่อรองรับการเขียนข้อมูล บนคอนโซล ที่สามารถรองรับชนิดข้อมูลเข้าแบบต่างๆ int x = 100; string s = “word”; Console.WriteLine(x); Console.WriteLine(s); C# Programming with Visual C# 2010 Express
9
ลักษณะโอเวอร์โหลดที่ทำได้
ชนิดตัวแปรไม่เหมือนกัน จำนวนตัวแปรไม่เท่ากัน ลำดับตัวแปรไม่เหมือนกัน(ดูที่ชนิดตัวแปร) การคืนค่าต้องเหมือนกัน 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
10
การใช้ตัวแปรเข้าแบบไดนามิกด้วยอะเรย์
ในบางครั้งเมื่อต้องการให้ตัวแปรเข้า หลายตัว การใช้ เมธอดโอเวอร์โหลด จำนวนที่มีตัวเข้าต่างๆ จะทำให้มี เมธอดโอเวอร์โหลดจำนวนมาก เกินไป การแก้ปัญหานี้แก้ได้ด้วยการทำ ให้มีตัวแปรเข้าแบบได นามิก คีย์เวิร์ดที่ใช้ทำเพื่อการนี้คือ params public static int Accumulate(params int[ ] value) { int sum= 0; foreach (var item in value) { sum += item; } return sum; } C# Programming with Visual C# 2010 Express
11
เงื่อนไขการใช้ตัวแปรเข้าแบบไดนามิก
มีเพียงหนึ่ง 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
12
ตัวแปรทางเลือกของเมธอด
การทำโอเวอร์โหลดไม่เพียงพอที่สนับสนุนการทำงานแบบ นี้ 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
13
การสร้างตัวแปรทางเลือก
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} เราสร้างตัวแปรทางเลือกที่มีการทำโอเวอร์โหลดไปด้วย เราจะ ใส่ตัวแปร 2 ตัว หรือ 3 ตัวก็ได้ และสังเกตด้วยว่า เมธอด สุดท้ายมีตัวแปรเข้า 3 ตัว มีการกำหนดค่าให้ตัวแปรสุดท้าย = 0.0F แต่ในการทำงานจริงสามารถเปลี่ยนค่าเป็น 10.0F ได้ สำหรับการไม่ใส่ตัวแปรที่ 3 เมธอดนี้จะกำหนดค่าปริยายให้ โดยสามารถใส่เงื่อนไขได้ ต้องให้ตัวแปรทางเลือกอยู่ในลำดับสุดท้ายเท่านั้น C# Programming with Visual C# 2010 Express
14
การเรียกเมธอดด้วยการระบุชื่อตัวแปร
นอกจากการใส่ตัวแปร และชนิดตัวแปรตามลำดับของการ กำหนดเมธอดแล้ว ซีชาร์ป ยังยืดหยุ่นได้อีก ด้วยการใส่ ตัวแปร และชนิดตัวแปร ไม่ต้องตามลำดับได้ ด้วยการ กำหนดชื่อตัวแปรเข้าในการเรียกใช้งาน ดังตัวอย่าง ต่อไปนี้ 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
15
การสร้างเมธอดอัตโนมัติ (Refactoring Code)
C# Programming with Visual C# 2010 Express
16
กลไกการส่งตัวแปร รูปแบบการส่งผ่านตัวแปรมีอยู่สามแบบคือ
การส่งตัวแปรเข้า (By Value) การส่งแบบนี้บางทีก็เรียก in ซึ่งเป็นค่าปริยาย (ไม่ใส่คำว่า in) ตัวแปรนี้จะทำสำเนาตัวแปร เข้ามา จะมีผลเฉพาะตัวแปรภายในเมธอดเท่านั้น ส่วนใหญ่ การในการเขียนโปรแกรมจะใช้การส่งตัวแปรเข้าแบบนี้ ซึ่งที่ ผ่านมาเราก็ใช้แบบนี้ทั้งหมด การส่งตัวแปรโดยการอ้างอิง (By Reference) การส่งแบบนี้ไม่มี การทำสำเนาตัวแปรตันทางแต่จะใช้การอ้างอิงแทน ดังนี้การ เปลี่ยนแปลงตัวแปรนี้จึงมีผลต่อตัวแปรต้นทาง หรือเรียกว่า มี in และ out การส่งตัวแปรออก หรือเรียกว่า out เพราะตัวแปรนี้ มีผลต่อ ตัวแปรภายนอก แต่ไม่มีผลต่อตัวแปร ภายในเมธอด C# Programming with Visual C# 2010 Express
17
ตัวอย่างการใช้ตัวแปร 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
18
ตัวอย่างการใช้ตัวแปรเข้าแบบอ้างอิง
static void Main(string[] args){ int i = 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
19
ตัวอย่างการใช้ตัวแปร 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
20
แนวทางการใช้ตัวแปรของเมธอด
กลไกการทำงาน Pass by value เป็นวิธีที่นิยมใช้มากที่สุด เพราะการเปลี่ยนแปลงใดเกิดขึ้นภายในเมธอดเท่านั้น หากว่าต้องการจะส่งตัวแปรออกออกนอกเมธอด มีอยู่สอง วิธีคือการใช้ return และ ref เป็นคีย์เวิร์ด ต่างกันที่ return จะใช้กับการส่งตัวแปรออกเพียงตัวเดียว แต่ ref ส่งตัวแปรออกได้หลายตัวได้ และมีการเปลี่ยนแปลงเกิดขึ้นสองทาง ในกรณีที่ต้องการ เกิดการเปลี่ยนเฉพาะทางออกเท่านั้นก็ให้ใช้ out เป็นคีย์ เวิร์ดกับตัวแปรเข้าของเมธอด ประสิทธิภาพการทำงาน ชนิดตัวแปรที่ทำงานได้เร็วคือ int, long มีประสิทธิภาพที่สุด และต้องใช้กับ pass by value C# Programming with Visual C# 2010 Express
21
การใช้เมธอดเรียกตัวเอง (Recursive)
static void Main(string[ args) { for (ulong i = 1; i < 10; i++) Console.WriteLine(i + ":" + Fibonacci(i)); Console.ReadKey(); } static ulong Fibonacci(ulong n) { if (n <= 2) return 1; else return Fibonacci(n - 1) + Fibonacci(n - 2); } //จะขียนลำดับเลขชุดนี้คือ 1, 1, 2, 3, 5, 8, 13, 21, 34 C# Programming with Visual C# 2010 Express
22
สรุปท้ายบท บทนี้เราได้เรียนรู้การสร้างเมธอด การใช้งานเมธอด การทำโอเวอร์โหลด กฎเกณฑ์ การสร้างเมธอดในลักษณะ ต่างๆ โดยเฉพาะเรื่อง การสร้างตัวแปรเข้า หรือ พารามิเตอร์ในลักษณะ ไดนามิกของอะเรย์ ไดนามิกของ ทางเลือก การระบุชื่อตัวแปร ในกรณีที่ไม่เรียงลำดับตัวแปร เข้า กลไกการทำงานของตัวแปรเข้า แบบทำสำเนาเข้า แบบอ้างอิงตัแปรเข้า และแบบอ้างอิงภายนอกอย่างเดียว รวมทั้งเมธอดเรียกตัวเองสำหรับโครงสร้างปัญหาที่ซับซ้อน C# Programming with Visual C# 2010 Express
23
คำถามทบทวน เมธอดอาจเรียกได้หลายชื่อ ชื่อเหล่านั้นคืออะไรได้บ้าง
มีเหตุผลอะไรที่ต้องสร้างสเตติกเมธอด และอินสแตทซ์เมธอด มีเหตุผลอะไรที่จะต้องทำโอเวอร์โหลดเมธอด ให้เขียนรายการลักษณะตัวแปรเข้าที่ทำโอเวอร์โหลดได้บ้าง ใช้คีย์เวิร์ดอะไรในการสร้างตัวแปรเข้าแบบไดนามิก ด้วยอะเรย์ มีเหตุผลอะไรที่ซีชาร์ปต้องสร้างตัวแปรทางเลือก ในกรณีที่ใช้การะบุชื่อตัวแปรเข้าทุกตัว ยกเว้นตัวแปร ทางเลือก ในการเรียกใช้งานเมธอดที่ตัวแปรทางเลือก ค่าตัวแปรทางเลือกจะมีค่าเป็นอะไร มีขั้นตอนอะไรบ้างในการสร้างเมธอดอัตโนมัติ C# Programming with Visual C# 2010 Express
24
คำถามทบทวน จากโค้ดต่อไปนี้ เมื่อเรียกเมธอด 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
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.