สารบัญ:
คำจำกัดความ - แอตทริบิวต์ทิศทางหมายถึงอะไร
แอตทริบิวต์ทิศทางใน C # เป็นแท็กที่ใช้ในการระบุพารามิเตอร์วิธีวัตถุที่มีข้อมูลที่เกี่ยวข้องกับทิศทางการไหลของข้อมูลระหว่างผู้โทรและผู้รับ
แอตทริบิวต์การควบคุมทิศทางการจัดการ - ที่วัตถุถูกจัดเตรียมไว้สำหรับการถ่ายโอนข้ามแอปพลิเคชันหรือขอบเขตกระบวนการ - ของทิศทางของพารามิเตอร์วิธีและค่าตอบแทน แอ็ตทริบิวต์ทิศทางถูกนำไปใช้เพื่อแก้ไขการรันไทม์ marshaling ในขณะที่สื่อสารรหัสที่ได้รับการจัดการซึ่งดำเนินการโดย Common Language Runtime (CLR) และรหัสที่ไม่มีการจัดการซึ่งดำเนินการนอกการควบคุมของ CLR
Techopedia อธิบายคุณสมบัติของทิศทาง
InAttribute และ OutAttribute เป็นแอตทริบิวต์ C # directional สองรายการที่ใช้ในการแมปไปยังแอตทริบิวต์ Language (IDL) ของ Interface Object Model Model ของโมเดลวัตถุ InAttribute maps to และ OutAttribute maps to ลายเซ็นของเมธอดที่ส่งคืนค่าวิธีจัดการจะจับคู่กับในไลบรารีชนิด จำเป็นต้องระบุแอตทริบิวต์ directional ที่ถูกต้องกับพารามิเตอร์ method เพื่อให้ไลบรารีชนิดการส่งออกตั้งค่าบิต In / Out อย่างถูกต้อง
ด้วยการใช้ InAttribute และ OutAttribute ในอาร์เรย์และจัดรูปแบบประเภทที่ไม่สามารถ Blittable (ที่ไม่มีการจัดการหน่วยความจำที่ได้รับการจัดการและไม่ได้จัดการทั่วไป) ผู้เรียกจะเห็นการเปลี่ยนแปลงที่น่าสนใจ คุณลักษณะของทิศทางที่ใช้กับประเภทเหล่านี้จะช่วยลดการทำสำเนาที่ไม่จำเป็นในระหว่างการจัดการ
ใน C # ระบบจะใช้ InAttribute และ OutAttribute ในสามรูปแบบพร้อมด้วยคำสำคัญสองคำระหว่างการโทรและการสื่อสารระหว่างผู้โทรและผู้ติดต่อดังนี้:
- "ออก" - โดยนัย
- "ref" - นัย
- (ไม่ได้ระบุ) - (โดยค่าเริ่มต้น)
คีย์เวิร์ด out และ ref ใช้สำหรับประเภทค่าและประเภทการอ้างอิงแบบอนุกรม คำหลักอ้างอิงหมายถึงว่าพารามิเตอร์ถูกทำเครื่องหมายในทั้งสองทิศทางและนอกนั้นหมายถึงการถ่ายโอนข้อมูล callee เมื่อไม่ได้ใช้ ref หรือ out ข้อมูลนี้แสดงถึงข้อมูลที่ถูกถ่ายโอนไปยัง callee
ตัวอย่างเช่นแอปพลิเคชันไคลเอนต์. NET ส่งค่าอินพุตไปยังวิธีคอมโพเนนต์ COM ซึ่งคำนวณผลลัพธ์ค่าอินพุตและส่งคืนผลลัพธ์ไปยังไคลเอ็นต์ แอ็ตทริบิวต์ทิศทางอาจใช้กับพารามิเตอร์ของวิธีการให้บริการคำร้องขอโดยระบุชนิด marshaling ที่ต้องการสำหรับค่าอินพุตและผลลัพธ์
แอตทริบิวต์ทิศทางมีลักษณะดังต่อไปนี้:
- ตัวเลือกและนำไปใช้กับพารามิเตอร์วิธีการในเวลาออกแบบ
- รองรับการทำงานร่วมกันระหว่าง COM และแพลตฟอร์มที่เรียกใช้เท่านั้น
- InAttribute ไม่สามารถใช้กับพารามิเตอร์ที่มีคีย์เวิร์ด out
CLR interop marshaler ให้บริการ marshaling ที่รันไทม์โดยการจัดการอาร์กิวเมนต์การเรียกเมธอดและค่าส่งคืนระหว่างหน่วยความจำที่ได้รับการจัดการและไม่ได้รับการจัดการ หากไม่ได้กำหนดแอตทริบิวต์ของทิศทางไว้ marshaler จะกำหนดทิศทางการไหลตามประเภทของพารามิเตอร์และตัวแก้ไข (ถ้ามี) marshaler ทำงานในลักษณะดังต่อไปนี้:
- มันไม่ได้เขียนทับข้อมูลที่ส่งผ่านเป็นพารามิเตอร์ "In" จากรหัสที่ไม่มีการจัดการ ดังนั้นข้อมูลเท่านั้นแบบอ่านอย่างเดียวเช่นข้อมูลที่เข้าถึงพร้อมกันอาจถูกส่งผ่าน
- ในขณะที่ผ่านวัตถุเช่นสตริงพื้นฐานหรือไบนารี (BSTR) ด้วยการจัดสรรหน่วยความจำที่กำหนดลำดับการจัดสรร / การจัดสรรคืนที่เหมาะสมจะถูกติดตามตามการตั้งค่าเข้า / ออก
