Partial Methods
พิชญา พิมพ์มหาศิริ 650710572
Partial Methods เป็นเมธอดพิเศษที่มีเฉพาะในภาษา C# ปกติแล้วเมธอดนี้จะอยู่ใน หรือใน struct ซึ่งช่วยให้สามารถประกาศเมธอดแต่ยังไม่ต้องกำหนดการทำงานของเมธอดนั้น
โดยส่วนการประกาศอยู่ใน partial class หนึ่ง และส่วนการนิยามอยู่ในอีก partial class หนึ่ง หรือใน partial class เดียวกันอาจมีทั้งส่วนประกาศและส่วนการนิยามเลยก็ได้ หากไม่มีการกำหนดการทำงานในส่วนใดเลยจะถูกละทิ้ง โดยคอมไพเลอร์จะไม่สร้างเมธอดนั้นใน หรือ และไม่ส่งผลกระทบต่อโปรแกรม

ส่วนการประกาศ (declaration) จะแสดงถึง signature ของ partial method ส่วนการนิยาม (definition) แสดงถึง implementation หรือการทำงานใน partial method
Syntax
การประกาศ partial method ประกาศโดยใช้คีย์เวิร์ด partial นำหน้าเสมอ
กฎและข้อจำกัดในการ Implement Partial method
signature ของ partial method ต้องเหมือนกับ partial classes
ไม่สามารถระบุ access modifiers นำหน้าได้ เช่น public, private, protected
ไม่สามารถระบุ modifiers อื่น ๆ เช่น virtual, override, sealed, new, extern
เป็นเมธอดแบบ private โดยปริยาย
คืนค่าเป็น void เท่านั้น
อาจมีพารามิเตอร์แบบ pass by ref.
ไม่สามารถมีพารามิเตอร์แบบ out
สามารถเป็นเมธอดแบบ static
สามารถเป็นเมธอดแบบ
ตัวอย่างโค้ดในการ Implement Partial method
ไฟล์ Square1.cs เป็นคลาสสำหรับแค่ประกาศเมธอดไว้เปล่า ๆ โดยในที่นี้ประกาศ partial method ที่ชื่อว่า area()
ไฟล์ Square2.cs เป็นคลาสสำหรับกำหนดการทำงานภายใน partial method ที่ชื่อว่า area()
เมื่อรันโค้ดข้างต้น คอมไพเลอร์จะรวม Square1.cs และ Square2.cs เข้าด้วยกันเป็นไฟล์เดียว ซึ่งก็คือคลาส Square ดังโค้ดด้านล่าง
เปรียบเทียบกับภาษา C, Java และ Python
C# มี Partial method เพื่อให้สามารถแยกและรวมการทำงานของเมธอดในหลายไฟล์ได้
C ไม่มี Partial method แต่สามารถรวมไฟล์หรือแยกการประกาศไว้ใน header files(.h) และการนิยามไว้ใน source files(.c)
โดย header files แบ่งออกเป็น 1) pre-existing เช่น #include <stdio.h> และ 2) user-defined ที่โปรแกรมเมอร์สามารถสร้างเองได้ตามการทำงานที่ต้องการ เช่น #include “Someheader.h”
ตัวอย่างโค้ดข้างต้นเป็นการแยกไฟล์ header.h ซึ่งเป็นแบบ user-defined (#include "header.h") กับ source.c แล้วรวมกันระหว่างคอมไพล์และลิงก์โปรแกรม เพื่อให้สามารถไปเรียกใช้งานได้ในฟังก์ชั่น main()
การแยกโค้ด
แยกการประกาศและการนิยามเมธอดในหลายไฟล์ผ่าน partial class
แยกการประกาศฟังก์ชันใน header files(.h) และการนิยามใน source files(.c)
การประกาศเมธอด
นำหน้าด้วยคีย์เวิร์ด partial ประกาศภายใน partial class/struct
ประกาศฟังก์ชันใน header files(.h)
การนิยามเมธอด
นิยามเมธอดใน partial class อื่นในไฟล์แยกกัน
นิยามฟังก์ชันใน source files(.c)
บังคับการนิยาม
ไม่บังคับ ถ้าไม่มีการนิยาม คอมไพเลอร์จะไม่สร้างเมธอด
บังคับ ถ้าไม่มีการนิยามจะเกิด linker error
ความสัมพันธ์ระหว่างไฟล์
ต้องใช้ร่วมกับ partial class หรือ struct เท่านั้น
header files(.h) ถูก include ใน source files(.c) เพื่อให้สามารถใช้ฟังก์ชันที่ประกาศใน source file ได้
Java ไม่มี partial method แต่สามารถใช้ abstract class และ interfaces ที่มีแนวคิดและลักษณะการทำงานที่ใกล้เคียงกันได้ ซึ่งจะเป็นการประกาศเมธอดเปล่า ๆ ไว้ก่อนโดยที่ยังไม่มีการนิยามภายใน
จากโค้ดตัวอย่างข้างต้น abstract class ที่ชื่อ GraphicObject มีการประกาศ abstract method ที่ชื่อ draw() และ resize() ไว้เปล่า ๆ และคลาส Circle ซึ่งเป็นคลาสลูกต้องกำหนดการทำงานเมธอด draw() และ resize() ด้วย
การประกาศเมธอด
นำหน้าด้วยคีย์เวิร์ด partial ประกาศภายใน partial class/struct
นำหน้าด้วยคีย์เวิร์ด abstract ประกาศภายใน abstract class
ใช้ใน interface โดยไม่มีการนิยาม
การนิยามเมธอด
นิยามใน partial class ใดก็ได้ หรือนิยามภายหลัง
ต้องนิยามในคลาสลูกที่สืบทอด abstract class นั้น
ต้องนิยามในคลาสที่ implement interface นั้น
บังคับการนิยาม
ไม่บังคับ ถ้าไม่มีการนิยาม คอมไพเลอร์จะไม่สร้างเมธอด
เมธอดที่เป็น abstract ต้องถูกนิยามในคลาสลูก
เมธอดที่ประกาศใน interface ต้องถูกนิยามในคลาสลูก
การใช้งานหลายที่
ใช้กับ partial class/struct หลายไฟล์
ใช้การสืบทอดหลายคลาสไม่ได้
คลาสสามารถ implement interface ได้หลายตัว
Python ไม่มี Partial method แต่สามารถแยกเมธอดและคลาสในหลายไฟล์ได้ แล้วนำมารวมผ่านการ import โดยฟังก์ชันที่ถูกประกาศและนิยามจะต้องอยู่ในที่เดียวกัน และไม่มีการละทิ้งฟังก์ชันที่ไม่ได้กำหนดการทำงาน หากไม่มีการกำหนดจะเกิด runtime error
คำสั่ง import รวมการทำงานสองอย่างเข้าด้วยกัน คือ ค้นหาโมดูลที่ตั้งชื่อไว้ จากนั้นจะ binding ผลลัพธ์จากการค้นหาเข้ากับชื่อ
จากโค้ดตัวอย่างข้างต้น แยกฟังก์ชัน say_hello() ไว้ในไฟล์หนึ่งที่ชื่อ file1.py จากนั้น import ฟังก์ชันจากไฟล์นั้นเข้าอีกไฟล์หนึ่งที่ชื่อ main.py พร้อมเรียกใช้ฟังก์ชันที่ถูก import มา
การทำงานหลัก
ประกาศและนิยามเมธอดแยกในหลายไฟล์
ค้นหาไฟล์และนำฟังก์ชันเข้ามาใช้งานในไฟล์ปัจจุบัน
การแยกโค้ด
แยกการประกาศและนิยามในหลายไฟล์ผ่าน partial class
แยกโค้ดเป็นโมดูลหรือไฟล์ต่าง ๆ แล้วรวมกันผ่านการ import
บังคับการนิยาม
ไม่บังคับ ถ้าไม่มีนิยาม คอมไพเลอร์จะไม่สร้างเมธอด
ต้องมีการนิยามฟังก์ชันหรือคลาสในไฟล์ที่ import
การเรียกใช้งาน
เรียกใช้ภายในคลาสที่ประกาศไว้
เรียกใช้ด้วยคีย์เวิร์ด import ตามด้วยโมดูลหรือไฟล์ และใช้ฟังก์ชันที่ import มา
ผลลัพธ์การรวมไฟล์
เมธอดที่นิยามจะนำมารวมกับคลาสหรือ struct ในตอนคอมไพล์
ฟังก์ชันและคลาสในไฟล์จะพร้อมใช้งานในไฟล์ที่ import
สไลด์นำเสนอ
คลิปนำเสนอ
อ้างอิง
ส่วนเนื้อหาหลัก Partial Methods
Ankita Saini. (2019, January 23). Partial Methods in C#. GeeksforGeeks. https://www.geeksforgeeks.org/partial-methods-in-c-sharp/ BillWagner. (2024, November 1). Partial member (C# Reference). Microsoft Learn. https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/partial-member Shivam Verma. (2024, March 27). Partial Method in C#. Naukri Code 360. https://www.naukri.com/code360/library/partial-method-in-c-sharp
ส่วนเนื้อหาเพิ่มเติมเกี่ยวกับ Partial Classes
Ankita Saini. (2020, November 17). Partial Classes in C#. GeeksforGeeks. https://www.geeksforgeeks.org/partial-classes-in-c-sharp/?ref=oin_asr1 BillWagner. (2024, November 1). Partial Classes and Methods (C# Programming Guide). Microsoft Learn. https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/partial-member
ส่วนการเปรียบเทียบกับภาษา C
C Function Declaration and Definition. (n.d.). W3Schools. https://www.w3schools.com/c/c_functions_decl.php Meghaabishtt. (2024, September 02). Header Files in C. GeeksforGeeks. https://www.geeksforgeeks.org/header-files-in-c-cpp-and-its-uses/ Durron597., & Dan Lugg. (2015, July 20). How do header and source files in C work?. Stack Overflow. https://stackoverflow.com/questions/5904530/how-do-header-and-source-files-in-c-work
ส่วนการเปรียบเทียบกับภาษา Java
Abstract Methods and Classes. (n.d.). Oracle Java Documentation. https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html Interfaces. (n.d.). Oracle Java Documentation. https://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html
ส่วนการเปรียบเทียบกับภาษา Python
5. The import system. (2024, October 10). Python Documentation. https://docs.python.org/3/reference/import.html Python 3: Import Another Python File as a Module. (2021, March 25). Computer Science Atlas. https://csatlas.com/python-import-file-module/
Last updated