Чому компілятор зберігає постійні значення в метаданих збірки? Чи вони безпосередньо вбудовані в код проміжного мови з метаданих збірки?
Чому компілятор зберігає постійні значення в метаданих збірки? Чи вони безпосередньо вбудовані в код проміжного мови з метаданих збірки?
Відповіді:
Найкращий спосіб подумати про це, я знаходжу: У момент компіляції const перетворюється на буквальний, де він використовується.
Єдиною причиною, по якій вона вступає в маніфест, у складі, визначеному ним, було зробити його доступним для споживачів. Це частина даного типу, і метадані цього типу зберігаються в його складі, а не в зборах, які споживають його.
Отже, це лінійний літерал у споживанні та властивість або поле, що вбудовується у метадані.
Я думаю, ви змішуєте дві збірки.
Константа зберігається лише у метаданих у складі, де вона визначена . Метадані містять інформацію про всі типи та членів у зборах, а константи є членами.
Інформація про константу не зберігається в збірці, де вона використовується . Постійне значення використовується безпосередньо в ІЛ так само, як якщо б ви записали постійне число або рядок прямо в джерело.
Приклад: Одне з моїх додатків використовує безліч констант для ідентифікації таблиць та полів баз даних. У мене є одна збірка, яка містить лише всі константи.
Коли я будую додаток, додаю посилання на збірку "константи" у Visual Studio. Оскільки збірка містить лише константи, у моїй програмі немає посилання на неї, а збірка "константи" не потрібна під час виконання.
Константи відомі під час компіляції, а потім вони зберігаються у метаданих збірки. Це означає, що ви можете визначати константи лише для примітивних типів.
Так, вони безпосередньо завантажуються з метаданих. Розподіл пам'яті під час виконання не було б.