คุณสามารถใช้out
คำสำคัญตามบริบทในสองบริบท (แต่ละลิงค์เชื่อมโยงไปยังข้อมูลรายละเอียด) เป็นตัวดัดแปลงพารามิเตอร์หรือในการประกาศพารามิเตอร์ประเภททั่วไปในส่วนต่อประสานและผู้รับมอบสิทธิ์ หัวข้อนี้อธิบายตัวดัดแปลงพารามิเตอร์ แต่คุณสามารถดูหัวข้ออื่นนี้สำหรับข้อมูลเกี่ยวกับการประกาศพารามิเตอร์ประเภททั่วไป
out
ข้อโต้แย้งสาเหตุคำหลักที่จะผ่านอ้างอิง นี่เป็นเหมือนref
คำสำคัญยกเว้นว่าref
ต้องการให้ตัวแปรถูกเตรียมใช้งานก่อนที่จะส่งผ่าน ในการใช้out
พารามิเตอร์ทั้งนิยามวิธีการและวิธีการโทรต้องใช้out
คำหลักอย่างชัดเจน ตัวอย่างเช่น: C #
class OutExample
{
static void Method(out int i)
{
i = 44;
}
static void Main()
{
int value;
Method(out value);
// value is now 44
}
}
แม้ว่าตัวแปรที่ส่งผ่านเป็นout
อาร์กิวเมนต์ไม่จำเป็นต้องเริ่มต้นก่อนที่จะส่งผ่านวิธีการที่เรียกว่าจะต้องมีการกำหนดค่าก่อนที่วิธีการส่งกลับ
แม้ว่าคำหลักref
และout
คำหลักจะทำให้เกิดพฤติกรรมการทำงานที่แตกต่างกัน แต่ก็ไม่ได้พิจารณาว่าเป็นส่วนหนึ่งของลายเซ็นวิธีการในเวลารวบรวม ดังนั้นเมธอดจะไม่สามารถโอเวอร์โหลดได้หากความแตกต่างเพียงอย่างเดียวคือวิธีหนึ่งใช้ref
อาร์กิวเมนต์และอีกวิธีหนึ่งใช้out
อาร์กิวเมนต์ ตัวอย่างเช่นรหัสต่อไปนี้จะไม่รวบรวม: C #
class CS0663_Example
{
// Compiler error CS0663: "Cannot define overloaded
// methods that differ only on ref and out".
public void SampleMethod(out int i) { }
public void SampleMethod(ref int i) { }
}
การบรรทุกเกินพิกัดสามารถทำได้อย่างไรก็ตามหากวิธีการหนึ่งใช้อาร์กิวเมนต์ref
หรืออีกวิธีหนึ่งไม่ใช้วิธีout
นี้: C #
class OutOverloadExample
{
public void SampleMethod(int i) { }
public void SampleMethod(out int i) { i = 5; }
}
คุณสมบัติไม่ใช่ตัวแปรดังนั้นจึงไม่สามารถส่งผ่านเป็นout
พารามิเตอร์ได้
สำหรับข้อมูลเกี่ยวกับการผ่านอาร์เรย์ให้ดูที่การใช้อาร์เรย์การผ่านref
และout
(คู่มือการเขียนโปรแกรม C #)
คุณไม่สามารถใช้ref
และout
คำหลักสำหรับวิธีต่อไปนี้:
Async methods, which you define by using the async modifier.
Iterator methods, which include a yield return or yield break statement.
ตัวอย่าง
การประกาศout
เมธอดมีประโยชน์เมื่อคุณต้องการให้เมธอดส่งคืนค่าหลายค่า ตัวอย่างต่อไปนี้ใช้out
เพื่อส่งคืนสามตัวแปรด้วยการเรียกใช้เมธอดเดียว โปรดทราบว่าอาร์กิวเมนต์ที่สามถูกกำหนดให้เป็นโมฆะ วิธีนี้ช่วยให้วิธีการส่งกลับค่าเป็นทางเลือก ค#
class OutReturnExample
{
static void Method(out int i, out string s1, out string s2)
{
i = 44;
s1 = "I've been returned";
s2 = null;
}
static void Main()
{
int value;
string str1, str2;
Method(out value, out str1, out str2);
// value is now 44
// str1 is now "I've been returned"
// str2 is (still) null;
}
}
out
ไม่สามารถอ่านตัวแปรที่ส่งผ่านการใช้ก่อนที่จะถูกกำหนดให้ref
ไม่มีข้อ จำกัด นี้ ดังนั้นมีที่