C # จัดให้มีrefและoutคำหลักเพื่อสร้างอาร์กิวเมนต์ที่จะส่งผ่านโดยการอ้างอิง ความหมายของทั้งสองนั้นคล้ายกันมาก ข้อแตกต่างเพียงอย่างเดียวคือการเริ่มต้นของตัวแปร flaged:
refต้องการตัวแปรที่จะเริ่มต้นก่อนที่จะส่งผ่านไปยังฟังก์ชั่นoutไม่ได้outต้องการตัวแปรที่จะเริ่มต้นภายในฟังก์ชั่นrefไม่ได้
กรณีการใช้งานของคำหลักสองคำนี้ก็เกือบจะเหมือนกันและการใช้งานที่บ่อยเกินไปของพวกเขาคือฉันเชื่อว่ามีกลิ่นรหัส (แม้ว่าจะมีกรณีการใช้ที่ถูกต้องเช่นTryParseและTryGetValueรูปแบบ)
ด้วยเหตุนี้ใครบางคนสามารถอธิบายได้ว่าทำไมมีเครื่องมือสองอย่างที่คล้ายกันมากใน C # สำหรับกรณีการใช้งานที่แคบมาก?
นอกจากนี้ในMSDNมีการระบุว่าพวกเขามีพฤติกรรมการใช้งานที่แตกต่างกัน:
แม้ว่าคีย์เวิร์ด ref และ out จะทำให้เกิดพฤติกรรมรันไทม์ที่แตกต่างกัน แต่ก็ไม่ได้พิจารณาว่าเป็นส่วนหนึ่งของลายเซ็นเมธอดในเวลารวบรวม
พฤติกรรมรันไทม์ของพวกเขาแตกต่างกันอย่างไร
ข้อสรุป
คำตอบทั้งสองนั้นดูถูกต้องขอบคุณทั้งคู่ ฉันยอมรับjmorenoเพราะชัดเจนกว่า
refใน C ++; เพื่อชี้ไปยังตัวชี้วัตถุ (หรือดั้งเดิม) ในคำถาม ieInt32.TryParse(myStr, out myInt)(C #) คือ "ดำเนินการ" เช่นเดียวกับint32_tryParse(myStr, &myInt)(C) ข้อแตกต่างเพียงข้อ จำกัด บางประการที่คอมไพเลอร์บังคับใช้เพื่อป้องกันข้อบกพร่อง (ฉันจะไม่โพสต์สิ่งนี้เป็นคำตอบเพราะฉันอาจผิดเกี่ยวกับวิธีการทำงานเบื้องหลัง แต่นี่เป็นวิธีที่ฉันจินตนาการว่ามันใช้งานได้ (เพราะสมเหตุสมผล)]