MethodBodyBlock Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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) |