我想了解存儲在方法表中的信息。這是我的代碼。在這個例子中,方法表中的字段是什麼意思?
class MyClass
{
private int x = 60;
private int y = 90;
public void MethodB()
{
Console.WriteLine("MethodB");
}
public void MethodC()
{
Console.WriteLine("MethodC");
}
public void MethodA()
{
GetHashCode();
Monitor.Enter(this);
Console.WriteLine("Attach debugger now");
Console.ReadKey();
}
static void Main(string[] args)
{
MyClass mc = new MyClass();
mc.MethodA();
}
}
這裏是物體的外觀在內存
0:000>做0x02368a1c
名稱:ConsoleApplication1.MyClass
方法表:001f3310
EEClass:001f136c
尺寸:16(0x10),以(C:\ Download \ PresentationPrep \ TechDaysDemos \ SomeTesting \ bin \ Debug \ SomeTesting.exe)
Fields:
MT字段偏移類型VT的Attr值名稱
6d032da0 4000001 4 System.Int32 1實例60×
6d032da0 4000002 8 System.Int32 1實例90ÿ
然後我轉儲方法表
0:000 > DD 001f3310
001f3310 00000000 00000010 00050011 00000004
001f3320 6d030770 001f2f2c 001f334c 001f136c
001f3330 00000000 00000000 6cf86ab0 6cf86ad0
001f3340 6cf86b40 6cff7540 008500d0 00000080
001f3350 00000000 00000000 00000000 00000000
001f3360 00000000 00000000 00000000 00000000
001f3370 00000000 00000000 00000000 00000000
001f3380 00000000 00000000 00000000 00000000
這裏是我發現有點混亂。
第一個字段表示對象的類型(如果它的類或數組等)。我的理解是,這個字段顯示0x00040000,而這裏顯示的只是0x00000000。
第二個字段是對象的大小。這個是好的。
第三場00050011有什麼意義?
這一個表示指向父對象類方法ToString,Equals,GetashCode和Finalize的繼承方法的數量。它是否正確?
我不明白其他領域,所以如果一些人也解釋這些,它將受到高度讚賞。
感謝布賴恩之間切換。這些字段在高級.NET調試手冊中有描述,但由於某些原因,我得到了不同的值,本書中對此進行了描述;我希望有人能解釋可能導致差異的原因。 – imak 2010-11-05 16:42:19