Некоторые методы отражения .NET (например, Module.ResolveField) принимают так называемые маркеры как параметры. Эти жетоны - это всего лишь номера Int32. Я видел только положительные токены в дизассемблере, но, вообще говоря, целочисленные числа могут быть отрицательными или нулевыми. Можно ли предположить, что токены CLR являются только положительными?Может быть токеном CLR равным нулю или отрицательным
3
A
ответ
5
Они на самом деле предназначены для чисел без знака. Из MS раздела II, раздел 22 (взят из this page):
метаданные пункты (записи в таблицах метаданных), рассматривается с помощью маркеров метаданных. Некодированные маркеры метаданных 4-байтовые целые числа без знака, которые содержат индекс таблицы метаданных в старшем бай и индекс 1 на основе записи в трех наименее значимом байте
Учитывая, что ни один индекс таблицы метаданных не имеет сам высокий бит, нет никакого беспокойства в том, что при преобразовании unsigned
int в int
вы создадите переполнение или отрицательное число.
Спасибо! Таким образом, хотя существует менее 129 таблиц метаданных, можно с уверенностью предположить, что токены положительны, и всегда можно предположить, что они не равны нулю, верно? – firegurafiku
@firegurafiku - ну, на данный момент всего 38, и я не думаю, что им приходилось добавлять новые, поскольку появились дженерики. И все эти индексы основаны на 1, поэтому нулей также нет. –