ความแตกต่างระหว่างการอ้างอิงและการออกใน C #

ผู้เขียน: Laura McKinney
วันที่สร้าง: 2 เมษายน 2021
วันที่อัปเดต: 5 พฤษภาคม 2024
Anonim
Difference between ref and out in C Sharp
วิดีโอ: Difference between ref and out in C Sharp

เนื้อหา


“ Ref” และ“ Out” เป็นโมเดอเรเตอร์พารามิเตอร์ที่ใช้ใน C # ใช้ ref และ out คุณสามารถส่งค่าชนิดใดก็ได้โดยอ้างอิงจากวิธีการใดก็ได้ เหตุผลของการส่งค่าประเภทใด ๆ โดยการอ้างอิงของมันแนะนำความแตกต่างที่สำคัญระหว่างคำหลักอ้างอิงและออก อ้าง คีย์เวิร์ดอนุญาตให้เมธอดที่เรียกใช้เพื่อแก้ไขเนื้อหาของอาร์กิวเมนต์ที่ส่งผ่านไปยังคีย์เวิร์ด ref ออก คีย์เวิร์ดอนุญาตให้เมธอดที่เรียกคืนค่ามากกว่าหนึ่งค่าในการโทรครั้งเดียว ลองศึกษาความแตกต่างระหว่างการอ้างอิงกับการเปรียบเทียบพร้อมกับแผนภูมิเปรียบเทียบ

  1. แผนภูมิเปรียบเทียบ
  2. คำนิยาม
  3. ความแตกต่างที่สำคัญ
  4. ข้อสรุป

แผนภูมิเปรียบเทียบ

พื้นฐานสำหรับการเปรียบเทียบอ้างออก
ขั้นพื้นฐานจะช่วยให้การเปลี่ยนแปลงในมูลค่าของการโต้แย้งดำเนินการกับคำหลักอ้างอิงจะช่วยให้วิธีการคืนค่าเหล่านั้นนำหน้าด้วยคำหลักออก
การเริ่มต้นพารามิเตอร์การอ้างอิงจะต้องเริ่มต้นก่อนที่จะเรียกวิธีการพารามิเตอร์ออกจะต้องเริ่มต้นภายในวิธีที่เรียกว่าก่อนที่จะยุติ
การประกาศพารามิเตอร์ที่จะเปลี่ยนแปลงโดยวิธีการจะประกาศให้เป็นอ้างอิงในขณะที่การประกาศวิธีการและวิธีการโทรพารามิเตอร์ที่จะส่งคืนจะต้องประกาศว่าเป็นอ้างอิงในขณะที่การประกาศวิธีการและวิธีการโทร


ความหมายของคำหลักอ้างอิง

“ ref” เป็นตัวดัดแปลงพารามิเตอร์ที่ใช้เมื่อมีความต้องการในการเรียกใช้เมธอดที่มีการอ้างอิงโดยการเรียก เมื่อเราต้องการให้การเปลี่ยนแปลงที่เกิดขึ้นกับข้อโต้แย้งภายในวิธีการที่เรียกใช้นั้นจะต้องสะท้อนให้เห็นถึงคุณค่าดั้งเดิมของตัวแปรนั้นจากนั้นจะใช้ตัวดัดแปลงพารามิเตอร์ ref ชนิดของค่าที่เราต้องการประกาศเป็นการอ้างอิงนำหน้าด้วยคีย์เวิร์ด“ ref” ในระหว่างการประกาศเมธอดและการเรียกเมธอด สามารถประกาศพารามิเตอร์ได้มากกว่าหนึ่งพารามิเตอร์ว่าเป็น“ การอ้างอิง” ในขณะที่โทรและประกาศวิธีการ

ใช้ระบบ คลาส DemoRef {public void Square (การอ้างอิง int) {s = s * s; }} คลาส Ref_main {โมฆะหลักคงที่ () {DemoRef ob = new DemoRef (); int a = 10; Console.WriteLine ("a before before call call:" + a); ob.Square (อ้างถึง); // ใช้คำหลัก Console.WriteLine ("สายหลังจาก:" + a); }} // เอาท์พุท a ก่อนการเรียกใช้เมธอด: 10 a after after call: 100

ในโค้ดด้านบนตัวแปร 'a’ จะถูกส่งผ่านเป็นอาร์กิวเมนต์ไปยังเมธอด Square (ref a) พร้อมกับโมดิฟายเออร์ของพารามิเตอร์ที่แนบมา มันหมายถึงการเปลี่ยนแปลงใด ๆ ที่วิธีการที่สแควร์ (อ้างอิง) จะดำเนินการกับตัวแปร 'a' ภายในมันจะสะท้อนให้เห็นในมูลค่าเดิมของ 'a' นอกวิธีเช่นกัน


มีจุดสำคัญบางอย่างที่ต้องจดจำเมื่อจัดการกับตัวดัดแปลงพารามิเตอร์“ อ้างอิง”

  • อาร์กิวเมนต์ที่คุณผ่านโดยการอ้างอิงไปยังวิธีการจะต้องเริ่มต้นก่อนที่จะเรียกวิธีการ
  • วิธีการจะต้องไม่กำหนดค่าเริ่มต้นให้กับอาร์กิวเมนต์การอ้างอิง
  • นอกจากนี้คุณยังสามารถใช้อ้างอิงพร้อมกับตัวแปรอ้างอิงด้วย

คำจำกัดความของคำหลักที่ไม่ใช้

ทุกครั้งที่คุณเรียกเมธอดมันจะส่งคืนค่าเดียวเท่านั้น หากคุณต้องการให้วิธีการส่งคืนมากกว่าหนึ่งค่าในการโทรคำสำคัญ "ออก" จะต้องใช้พร้อมกับพารามิเตอร์ที่คุณต้องการที่จะกลับมาเมื่อวิธีการถูกยกเลิก บางครั้งเป็นกรณีที่เมื่อเราไม่ต้องการส่งผ่านสิ่งใดไปยังวิธีการ แต่ต้องการวิธีการคืนกลับบางสิ่งบางอย่างที่เราใช้พารามิเตอร์ที่มีคำหลักออกมาทำความเข้าใจกับตัวอย่าง

ใช้ระบบ คลาส DemoOut {public int Decompose (double x, double เศษส่วน) {int whole_num; whole_num = (int) x; เศษส่วน = x - whole_num; ส่งคืนทั้งหมด _num; }} คลาส Out_maint {โมฆะหลักคงที่ () {DemoOut ob = new DemoOut (); int i; frac คู่ i = ob.Decompose (100.125, ออก frac); // ใช้คีย์เวิร์ด Console.WriteLine ("ส่วนจำนวนเต็มคือ" + i); Console.WriteLine ("ส่วนที่เป็นเศษส่วน" + frac); }} // output จำนวนเต็มเท่ากับ 100 ส่วนเศษส่วนเท่ากับ 0.125

ในโค้ดด้านบนจะมีการส่งคืนสองค่าโดยเมธอด Decompose () หนึ่งคำสั่งจะส่งคืนโดยคำหลัก“ return” เช่น Whole_num และอื่น ๆ จะส่งคืนพารามิเตอร์ซึ่งนำหน้าด้วยคีย์เวิร์ด out ขณะที่เมธอดเรียกว่า“ frac”

จุดสำคัญที่ควรจดจำเกี่ยวกับคำสำคัญ

  • ต่างจากคำหลักอ้างอิงพารามิเตอร์ที่ใช้คำหลักออกจะต้องไม่เริ่มต้นก่อนที่จะเรียกวิธี
  • เมธอดที่เรียกใช้จะกำหนดค่าให้กับพารามิเตอร์ด้วยคีย์เวิร์ด out เนื่องจากถือว่าไม่ได้กำหนดภายในเมธอดที่เรียกเช่นนั้นจะถือว่าไม่มีค่าเริ่มต้น
  • เมธอดที่เรียกใช้ต้องกำหนดค่าให้กับพารามิเตอร์ out ก่อนที่เมธอดจะสิ้นสุด
  • คีย์เวิร์ด out ยังสามารถใช้ได้กับตัวแปรอ้างอิง
  1. เมื่อตัวแปรนำหน้าด้วยคำหลักอ้างอิงถูกส่งผ่านไปยังวิธีการใด ๆ แล้วการเปลี่ยนแปลงที่เกิดขึ้นภายในวิธีการสะท้อนให้เห็นในค่าเดิม เมื่อตัวแปรที่ส่งผ่านไปยังเมธอดถูกนำหน้าด้วยคีย์เวิร์ด out เมธอดจะส่งคืนเมธอดโดยไม่ใช้คีย์เวิร์ด return
  2. พารามิเตอร์ ref ควรเริ่มต้นก่อนที่จะถูกส่งผ่านไปยังวิธีการ ในทางตรงกันข้ามพารามิเตอร์ออกจะต้องเริ่มต้นได้ภายในวิธีการที่จะถูกส่งผ่านไป
  3. ในขณะที่โทรประกาศหรือกำหนดวิธีการพารามิเตอร์อ้างอิงจะถูกประกาศอย่างชัดเจนว่าเป็นอ้างอิง ในขณะที่การเรียกประกาศหรือกำหนดวิธีการพารามิเตอร์ออกประกาศอย่างชัดเจนว่าเป็นออก

สรุป:

เมื่อใดก็ตามที่ตัวแปรถูกส่งผ่านโดยการอ้างอิงไปยังวิธีการคำหลักอ้างอิงและออกสามารถนำมาใช้ ในขณะที่เหตุผลของการใช้คำหลักทั้งสองนั้นแตกต่างกันซึ่งสามารถใช้คำสำคัญอ้างอิงเพื่อเปลี่ยนค่าของอาร์กิวเมนต์ที่นำหน้าด้วยคำหลักอ้างอิงส่งผ่านไปยังวิธีการที่เรียกว่าและคำหลักออกจะใช้เพื่อส่งกลับค่าของอาร์กิวเมนต์นำหน้า โดยคำหลักออก