MethodBodyBlock Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет текст метода в сборке ECMA 335.
public ref class MethodBodyBlock sealed
public sealed class MethodBodyBlock
type MethodBodyBlock = class
Public NotInheritable Class MethodBodyBlock
- Наследование
-
MethodBodyBlock
Примеры
В этом примере показано, как считывать тела методов для всех методов в указанном определении типа и отображать сведения о тексте метода:
static void PrintMethods(PEReader reader, MetadataReader mr, TypeDefinition tdef)
{
MethodDefinitionHandleCollection methods = tdef.GetMethods();
foreach (MethodDefinitionHandle mdefh in methods)
{
MethodDefinition mdef = mr.GetMethodDefinition(mdefh);
string mname = mr.GetString(mdef.Name);
Console.WriteLine($"Method: {mname}");
// Get the relative address of the method body in the executable
int rva = mdef.RelativeVirtualAddress;
if (rva == 0)
{
Console.WriteLine("Method body not found");
Console.WriteLine();
continue;
}
// Get method body information
MethodBodyBlock mb = reader.GetMethodBody(rva);
Console.WriteLine($" Maximum stack size: {mb.MaxStack}");
Console.WriteLine($" Local variables initialized: {mb.LocalVariablesInitialized}");
byte[]? il = mb.GetILBytes();
Console.WriteLine($" Method body size: {il?.Length ?? 0}");
Console.WriteLine($" Exception regions: {mb.ExceptionRegions.Length}");
Console.WriteLine();
foreach (var region in mb.ExceptionRegions)
{
Console.WriteLine(region.Kind.ToString());
Console.WriteLine($" Try block offset: {region.TryOffset}");
Console.WriteLine($" Try block length: {region.TryLength}");
Console.WriteLine($" Handler offset: {region.HandlerOffset}");
Console.WriteLine($" Handler length: {region.HandlerLength}");
Console.WriteLine();
}
}
}
Комментарии
Текст метода содержит инструкции по языку CIL, составляющие метод и сведения о локальных переменных и регионах исключений. Метод можно использовать GetMethodBody для получения MethodBodyBlock экземпляра для указанного метода.
Формат инструкций и метаданных CIL определяется спецификацией ECMA-335. Дополнительные сведения см. в статье "Стандартная среда ECMA-335 — инфраструктура общего языка( CLI) на веб-сайте Ecma International.
Свойства
| Имя | Описание |
|---|---|
| ExceptionRegions |
Возвращает массив областей исключений в этом тексте метода. |
| LocalSignature |
Возвращает дескриптор в сигнатуру локальных переменных. |
| LocalVariablesInitialized |
Возвращает значение, указывающее, инициализированы ли локальные переменные в этом методе для значений по умолчанию для их типов. |
| MaxStack |
Возвращает максимальное количество элементов в стеке вычислений для этого метода. |
| Size |
Возвращает размер текста метода, включая области заголовка, IL и исключения. |
Методы
| Имя | Описание |
|---|---|
| Create(BlobReader) |
Создает новый экземпляр класса с помощью указанного MethodBodyBlock средства чтения BLOB-объектов. |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetILBytes() |
Получает байт-код il этого метода в виде массива байтов. |
| GetILContent() |
Возвращает байт-код il этого метода в виде неизменяемого массива. |
| GetILReader() |
Возвращает средство чтения BLOB-объектов, которое считывает байт-код IL этого текста метода. |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |