C # มีout
และref
คำหลัก ทำไมต้องใช้ทั้งสองนี้ คำเตือน: ฉันไม่มีความรู้อย่างลึกซึ้งเกี่ยวกับ C #
ref
และout
? หรือคุณกำลังถามว่าการใช้ข้อโต้แย้งแบบอ้างอิงref
/ out
เปรียบเทียบกับข้อโต้แย้งแบบมูลค่า (ไม่มีการแก้ไขพารามิเตอร์)? หรือทั้งคู่?
C # มีout
และref
คำหลัก ทำไมต้องใช้ทั้งสองนี้ คำเตือน: ฉันไม่มีความรู้อย่างลึกซึ้งเกี่ยวกับ C #
ref
และout
? หรือคุณกำลังถามว่าการใช้ข้อโต้แย้งแบบอ้างอิงref
/ out
เปรียบเทียบกับข้อโต้แย้งแบบมูลค่า (ไม่มีการแก้ไขพารามิเตอร์)? หรือทั้งคู่?
คำตอบ:
การนำมาใช้อย่างชาญฉลาดนั้นเป็นสิ่งเดียวกัน แต่out
สื่อสารสิ่งที่ref
ไม่มี: คุณไม่สนใจอินพุต นี่หมายถึงบางสิ่งสำหรับคุณและเครื่องมือ ตัวอย่างเช่นคุณสามารถส่งผ่านตัวแปรที่ไม่มีค่าเริ่มต้นไปยังout
พารามิเตอร์และนั่นไม่ใช่ปัญหาไม่ว่าจะเกิดขึ้นที่ไหนและภายในฟังก์ชันที่คุณจำเป็นต้องกำหนดค่าให้กับout
พารามิเตอร์ก่อนที่จะส่งคืน ทั้งหมดมีref
ค่า
out
ให้มันเป็นวิธีที่ดีกว่าซึ่งตรงกับวิธีที่คุณต้องการจัดการกับตัวแปรในตอนแรก
out
param เพราะฟังก์ชั่นที่รับไม่ได้อ่านจากมัน .
เพื่อให้เข้าใจคำหลักสองคำนี้คุณจะต้องเข้าใจว่าการส่งค่าโดยการอ้างอิงหมายถึงอะไร โดยพื้นฐานแล้วหมายความว่าหากคุณแก้ไขตัวแปรพารามิเตอร์ที่คุณส่งผ่านภายในเมธอดหรือฟังก์ชันตัวแปรนั้นจะเก็บค่าที่แก้ไขไว้เมื่อฟังก์ชันของคุณออก การประกาศพารามิเตอร์เป็นref
หรือout
บรรลุสิ่งนี้ในขณะที่ตัวแปรพารามิเตอร์ทั่วไปจะคงไว้ซึ่งค่าดั้งเดิมแม้ว่าคุณจะแก้ไขในฟังก์ชัน
ความแตกต่างเพียงอย่างเดียวระหว่างref
และout
คือout
ไม่ต้องการให้คุณเริ่มต้นตัวแปรก่อนที่จะส่งผ่านไปยังฟังก์ชัน แต่ref
ทำ ในขณะที่out
ไม่ต้องการให้คุณกำหนดบางสิ่งบางอย่างให้กับตัวแปรภายในฟังก์ชัน แต่ref
ไม่ได้
คุณถาม.
C # ออกไปข้างนอกแล้วทำไมต้องใช้ทั้งสองนี้ ฉันไม่มีความรู้เชิงลึกเกี่ยวกับ C # ทำไมต้องใช้พารามิเตอร์ out และ ref?
และคำตอบก็คือพวกเขาไม่ได้ต้องการ, java เช่นไม่มีและ VB มีเพียงอ้างอิง (และต้องการเพียงในการประกาศวิธีการ)
คุณสามารถเขียนโปรแกรมทั้งหมดได้อย่างง่ายดายโดยไม่ต้องใช้ทั้งโปรแกรม
มีอยู่เพราะเป็นประโยชน์ในบางครั้ง ซึ่งเป็นสาเหตุที่มีอยู่สองอย่างและไม่ใช่เพียงอย่างเดียว - เนื่องจากมีประโยชน์ในการสร้างความแตกต่างระหว่าง 'นี่คือบางสิ่งให้แก้ไขหากคุณต้องการ' และ 'ให้คุณค่าใหม่กับสิ่งนี้'
ภาษาอื่นมีลำดับความสำคัญต่างกันและอาจมีหรือไม่มีภาษาเหล่านี้หรือเทียบเท่า พวกเขาอาจไม่เห็นด้วยว่ามีประโยชน์หรือไม่และอาจตัดสินใจอย่างแข็งขันที่จะไม่ดำเนินการอย่างใดอย่างหนึ่ง
ที่แกนกลางทั้งสองref
และout
จัดเตรียมกลไกสำหรับการส่งที่อยู่ของตัวแปรไปยังวิธีการเพื่อให้สามารถอัปเดตได้ - การกำหนดให้กับref
หรือout
พารามิเตอร์จะปรับปรุงตัวแปรในบริบทของผู้โทร ความแตกต่างอยู่ที่ไหนในการค้ำประกัน: out
รับประกันว่าตัวแปรจะได้รับการอัปเดตref
ไม่ใช่
จากอีกด้านหนึ่งของการโทรมีความแตกต่างที่คล้ายกัน out
พารามิเตอร์กับวิธีการของเราไม่รับประกันว่าจะมีอะไรที่เป็นประโยชน์เมื่อเดินทางมาถึงและจะต้องตั้งค่าในบางจุดขณะที่ref
พารามิเตอร์สามารถสันนิษฐานว่าจะมีค่าและเราไม่จำเป็นต้องทำเฉพาะอะไรกับมัน
ความแตกต่างนี้มีผลกระทบต่อการวิเคราะห์รหัสการสร้างและการเพิ่มประสิทธิภาพซึ่งในขณะที่เราไม่ได้ใช้เวลาส่วนใหญ่อย่างเห็นได้ชัดอาจมีผลกระทบบางอย่างเกี่ยวกับวิธีที่โปรแกรมของเราทำงาน ตัวสร้างรหัสสามารถเลื่อนการจัดสรรตัวแปรจนกว่าจะมีการโทรทันทีโดยทันทีเครื่องมือเพิ่มประสิทธิภาพอาจตัดสินใจว่าสามารถเรียงลำดับการดำเนินการบางอย่างได้อย่างมีประสิทธิภาพมากขึ้นตามสัญญาเป็นต้น
ในแง่ของการใช้งาน: ตามกฎทั่วไปฉันใช้out
สำหรับสถานการณ์ที่ฉันไม่สนใจเกี่ยวกับเนื้อหาของตัวแปรเมื่อมันมาถึงเป็นพารามิเตอร์และref
เมื่อฉันทำ