ทำไมคอมไพเลอร์เก็บค่าคงที่ในข้อมูลเมตาแอสเซมบลี? พวกเขาฝังตัวโดยตรงกับรหัสภาษาระดับกลางจากข้อมูลเมตาแอสเซมบลีหรือไม่
ทำไมคอมไพเลอร์เก็บค่าคงที่ในข้อมูลเมตาแอสเซมบลี? พวกเขาฝังตัวโดยตรงกับรหัสภาษาระดับกลางจากข้อมูลเมตาแอสเซมบลีหรือไม่
คำตอบ:
วิธีคิดที่ดีที่สุดที่ฉันพบคือ ณ เวลารวบรวม const จะถูกแปลงเป็นตัวอักษรที่ใช้
เหตุผลเดียวที่มันเข้าสู่การแสดงออกในการชุมนุมที่กำหนดไว้คือเพื่อให้ผู้บริโภคสามารถเข้าถึงได้ มันเป็นส่วนหนึ่งของประเภทที่กำหนดและข้อมูลเมตาของประเภทนั้นถูกเก็บไว้ในชุดประกอบไม่ใช่ชุดประกอบที่ใช้งาน
ดังนั้นจึงเป็นแบบอินไลน์ในการใช้และคุณสมบัติหรือฟิลด์ที่ห่อหุ้มประเภทวัสดุสิ้นเปลืองในข้อมูลเมตา
ฉันค้นคว้าด้วยตัวเองเป็นเวลานานและพบจากหนังสือว่านี่อาจเป็นเหตุผล ...
เนื่องจากค่าคงที่ไม่เคยเปลี่ยนแปลงค่าคงที่จึงถือเป็นส่วนหนึ่งของประเภทการกำหนด ดังนั้นการกำหนดค่าคงที่จึงสร้างข้อมูลเมตา
ฉันคิดว่าคุณผสมผสานสองแอสเซมบลี
คงถูกเก็บไว้เฉพาะในข้อมูลเมตาในที่ชุมนุมซึ่งจะมีการกำหนดไว้ ข้อมูลเมตาประกอบด้วยข้อมูลเกี่ยวกับชนิดและสมาชิกทั้งหมดในแอสเซมบลีและค่าคงที่เป็นสมาชิก
ไม่มีข้อมูลเกี่ยวกับค่าคงที่ในแอสเซมบลีที่ใช้งานอยู่ ค่าคงที่จะใช้โดยตรงใน IL เช่นเดียวกับที่คุณเขียนจำนวนคงที่หรือสตริงโดยตรงในแหล่งที่มา
ตัวอย่าง: หนึ่งในแอปพลิเคชันของฉันใช้ค่าคงที่จำนวนมากเพื่อระบุตารางฐานข้อมูลและเขตข้อมูล ฉันมีหนึ่งชุดที่มีค่าคงที่ทั้งหมดเท่านั้น
เมื่อฉันสร้างแอปพลิเคชันฉันเพิ่มการอ้างอิงไปยังแอสเซมบลี "ค่าคงที่" ใน Visual Studio เนื่องจากแอสเซมบลีประกอบด้วยค่าคงที่เท่านั้นไม่มีการอ้างอิงถึงในแอปพลิเคชันของฉันและแอสเซมบลี "ค่าคงที่" ไม่จำเป็นในเวลาทำงาน
ค่าคงที่เป็นที่รู้จักกันในเวลารวบรวมแล้วพวกเขาจะถูกเก็บไว้ในเมตาดาต้าของการชุมนุม ซึ่งหมายความว่าคุณสามารถกำหนดค่าคงที่สำหรับประเภทดั้งเดิมเท่านั้น
ใช่พวกเขาจะถูกโหลดโดยตรงจากเมตาดาต้า จะไม่มีการจัดสรรหน่วยความจำขณะใช้งานจริง