ความเข้าใจเกี่ยวกับพารามิเตอร์เมธอดใน C#: อธิบาย ref
, val
, และ out
เมื่อดำดิ่งเข้าสู่โลกของการเขียนโปรแกรมใน C# คุณอาจพบกับพารามิเตอร์เมธอดเช่น ref
, val
, และ out
คีย์เวิร์ดเหล่านี้อาจสร้างความสับสนได้ โดยเฉพาะสำหรับผู้เริ่มต้นที่เพิ่งเริ่มเรียนรู้เกี่ยวกับวิธีที่ข้อมูลถูกส่งเข้าและออกจากเมธอด ไม่ว่าคุณจะเขียนโปรแกรมใน C# หรือ VB.Net การเข้าใจความแตกต่างระหว่างประเภทพารามิเตอร์เหล่านี้เป็นสิ่งสำคัญสำหรับการเขียนโค้ดที่มีประสิทธิภาพและเชื่อถือได้
พื้นฐานของการส่งพารามิเตอร์
ใน C# โดยค่าเริ่มต้นพารามิเตอร์จะถูกส่งไปยังเมธอดในลักษณะที่เฉพาะ เมื่อคุณส่งอ็อบเจ็กต์ไปยังฟังก์ชัน คุณไม่ได้ส่งอ็อบเจ็กต์ที่แท้จริง แต่คุณจะส่งสำเนาของการอ้างอิงไปยังอ็อบเจ็กต์นั้น นั่นหมายความว่าหากคุณปรับเปลี่ยนพารามิเตอร์ภายในเมธอด คุณจะทำการเปลี่ยนแปลงแค่ค่าของพารามิเตอร์เองและไม่ใช่ตัวแปรต้นฉบับที่คุณส่งเข้าไป
ตัวอย่างของการส่งพารามิเตอร์เริ่มต้น
void Test1(string param)
{
param = "ค่าใหม่";
}
string s1 = "ค่าเริ่มต้น";
Test1(s1);
// s1 == "ค่าเริ่มต้น"
ในตัวอย่างข้างต้น เมธอด Test1
พยายามที่จะเปลี่ยน param
แต่ s1
ยังคงไม่เปลี่ยนแปลงหลังจากการเรียกใช้เมธอด นี่แสดงให้เห็นว่าการเปลี่ยนแปลงแค่พารามิเตอร์ไม่ได้ส่งผลต่อตัวแปรต้นฉบับ
พลังของพารามิเตอร์ ref
และ out
เพื่อเปลี่ยนแปลงค่าจริงของตัวแปรที่คุณส่ง คุณสามารถใช้คีย์เวิร์ด ref
หรือ out
การใช้ประเภทพารามิเตอร์เหล่านี้ช่วยให้คุณทำงานโดยตรงกับตัวแปรเอง ซึ่งหมายความว่าการเปลี่ยนแปลงภายในเมธอดจะมีผลสะท้อนในบริบทการเรียกใช้
พารามิเตอร์ ref
- คำจำกัดความ: พารามิเตอร์ที่ประกาศด้วย
ref
จะถูกส่งโดยการอ้างอิง หมายความว่าคุณสามารถเปลี่ยนแปลงตัวแปรต้นฉบับในเมธอดที่เรียก - การตั้งค่าเริ่มต้น: พารามิเตอร์
ref
ต้องถูกตั้งค่าก่อนที่จะส่งให้เมธอด
ตัวอย่างการใช้ ref
void Test2(ref string param)
{
param = "ค่าใหม่";
}
string s2 = "ค่าเริ่มต้น";
Test2(ref s2);
// s2 == "ค่าใหม่"
ในสถานการณ์นี้ s2
ถูกเปลี่ยนแปลงโดยตรงในเมธอด Test2
ผ่านพารามิเตอร์ ref
พารามิเตอร์ out
- คำจำกัดความ: คล้ายกับ
ref
พารามิเตอร์out
ก็ถูกส่งโดยการอ้างอิงเช่นกัน อย่างไรก็ตามมันถูกออกแบบมาเพื่อส่งคืนค่าหลายค่าออกจากเมธอด - การตั้งค่าเริ่มต้น: ต่างจาก
ref
พารามิเตอร์out
ไม่จำเป็นต้องถูกตั้งค่าก่อนที่จะถูกส่ง เมธอดที่ถูกเรียกต้องรับผิดชอบในการตั้งค่าก่อนที่จะทำการออกจากฟังก์ชัน
ตัวอย่างการใช้ out
void Test3(out string param)
{
param = "ค่าอีกหนึ่งค่า";
}
string s3;
Test3(out s3);
// s3 == "ค่าอีกหนึ่งค่า"
ตามที่แสดงให้เห็น Test3
จะเริ่มต้นพารามิเตอร์ out
param
ภายในเมธอดเอง ซึ่งช่วยให้เราได้รับค่าหลังจากการทำงานของเมธอดเสร็จสิ้น
ความแตกต่างที่สำคัญระหว่าง ref
และ out
แม้ว่าทั้ง ref
และ out
จะอนุญาตให้มีการเปลี่ยนแปลงตัวแปรที่ส่งไป แต่พวกเขามีข้อกำหนดที่แตกต่างกัน:
- การตั้งค่าเริ่มต้น:
ref
ต้องการให้ตัวแปรถูกตั้งค่าก่อนที่จะส่งout
ไม่จำเป็นต้องมีการตั้งค่าเริ่มต้นล่วงหน้า แต่ ต้อง ถูกตั้งค่าในเมธอดที่เรียกใช้ก่อนที่จะใช้งาน - การบังคับของคอมไพเลอร์: ความแตกต่างระหว่างทั้งสองนี้จะถูกบังคับโดยคอมไพเลอร์ C# แม้ว่าทั้งคู่จะถูกสร้างเป็นส่วนหนึ่งของ Common Language Runtime (CLR) VB.Net ใช้เฉพาะ
ByRef
ซึ่งทำงานคล้ายกับref
โดยไม่มีทางเลือกโดยตรงสำหรับout
ข้อคิดสุดท้าย
การเข้าใจพารามิเตอร์ ref
, val
, และ out
เป็นสิ่งสำคัญสำหรับการทำความเข้าใจการเรียกเมธอดใน C# และ VB.Net โดยการใช้คีย์เวิร์ดเหล่านี้อย่างรอบคอบ คุณสามารถเพิ่มประสิทธิภาพการจัดการข้อมูลในแอปพลิเคชันของคุณได้อย่างมีประสิทธิภาพ ไม่ว่าคุณจะส่งคืนค่าหลายค่า หรือปรับปรุงตัวแปรต้นฉบับ การรู้วิธีใช้เทคนิคเหล่านี้จะช่วยให้คุณเขียนโค้ดที่สะอาดและมีประสิทธิภาพมากขึ้นได้
ด้วยการคำนึงถึงวัตถุประสงค์และกฎที่แตกต่างกันของแต่ละประเภทพารามิเตอร์ (ref
สำหรับการอัปเดตการอ้างอิงและ out
สำหรับการส่งคืนค่าหลายค่า) คุณสามารถยกระดับทักษะการเขียนโปรแกรมของคุณและเพิ่มความเข้าใจเกี่ยวกับวิธีที่ข้อมูลหมุนเวียนในแอปพลิเคชันของคุณ.