Aracılığıyla paylaş


MethodBodyBlock Sınıf

Tanım

ECMA 335 derlemesindeki yöntem gövdesini temsil eder.

public ref class MethodBodyBlock sealed
public sealed class MethodBodyBlock
type MethodBodyBlock = class
Public NotInheritable Class MethodBodyBlock
Devralma
MethodBodyBlock

Örnekler

Bu örnekte, belirtilen tür tanımındaki tüm yöntemler için yöntem gövdelerinin nasıl okunduğu ve yöntem gövdesi bilgilerinin nasıl görüntüleneceği gösterilmektedir:

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();
        }
    }
}

Açıklamalar

Yöntem gövdesi, bir yöntemi oluşturan Ortak Ara Dil (CIL) yönergelerini ve yerel değişkenleri ve özel durum bölgeleri hakkındaki bilgileri içerir. Belirtilen yöntemin GetMethodBody örneğini MethodBodyBlock almak için yöntemini kullanabilirsiniz.

CIL yönergelerinin ve meta verilerin biçimi ECMA-335 belirtimi tarafından tanımlanır. Daha fazla bilgi için Ecma Uluslararası Web sitesindeki Standart ECMA-335 - Ortak Dil Altyapısı (CLI) bölümüne bakın.

Özellikler

ExceptionRegions

Bu yöntem gövdesindeki özel durum bölgeleri dizisini alır.

LocalSignature

Tanıtıcıyı yerel değişkenler imzasına alır.

LocalVariablesInitialized

Bu yöntemdeki yerel değişkenlerin türlerinin varsayılan değerlerine başlatılıp başlatılmadığını gösteren bir değer alır.

MaxStack

Bu yöntem için değerlendirme yığınındaki en fazla öğe sayısını alır.

Size

Üst bilgi, IL ve özel durum bölgeleri dahil olmak üzere yöntem gövdesinin boyutunu alır.

Yöntemler

Create(BlobReader)

Belirtilen blob okuyucuyu MethodBodyBlock kullanarak sınıfının yeni bir örneğini oluşturur.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetILBytes()

Bu yöntem gövdesinin IL bayt kodunu bayt dizisi olarak alır.

GetILContent()

Bu yöntem gövdesinin IL bayt kodunu sabit bir dizi olarak alır.

GetILReader()

Bu yöntem gövdesinin IL bayt kodunu okuyan bir blob okuyucu alır.

GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır