2014-02-20 2 views
3

Некоторые методы отражения .NET (например, Module.ResolveField) принимают так называемые маркеры как параметры. Эти жетоны - это всего лишь номера Int32. Я видел только положительные токены в дизассемблере, но, вообще говоря, целочисленные числа могут быть отрицательными или нулевыми. Можно ли предположить, что токены CLR являются только положительными?Может быть токеном CLR равным нулю или отрицательным

ответ

5

Они на самом деле предназначены для чисел без знака. Из MS раздела II, раздел 22 (взят из this page):

метаданные пункты (записи в таблицах метаданных), рассматривается с помощью маркеров метаданных. Некодированные маркеры метаданных 4-байтовые целые числа без знака, которые содержат индекс таблицы метаданных в старшем бай и индекс 1 на основе записи в трех наименее значимом байте

Учитывая, что ни один индекс таблицы метаданных не имеет сам высокий бит, нет никакого беспокойства в том, что при преобразовании unsigned int в int вы создадите переполнение или отрицательное число.

+0

Спасибо! Таким образом, хотя существует менее 129 таблиц метаданных, можно с уверенностью предположить, что токены положительны, и всегда можно предположить, что они не равны нулю, верно? – firegurafiku

+1

@firegurafiku - ну, на данный момент всего 38, и я не думаю, что им приходилось добавлять новые, поскольку появились дженерики. И все эти индексы основаны на 1, поэтому нулей также нет. –