メソッド テーブルに格納されている情報を理解しようとしています。これが私のコードです。
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> !do 0x02368a1c
Name: ConsoleApplication1.MyClass
MethodTable: 001f3310
EEClass: 001f136c
Size: 16(0x10) bytes
(C:\Download\PresentationPrep\TechDaysDemos\SomeTesting\bin\Debug\SomeTesting.exe)
Fields:
MT Field Offset Type VT Attr Value Name
6d032da0 4000001 4 System.Int32 1 instance 60 x
6d032da0 4000002 8 System.Int32 1 instance 90 y
次に、メソッドテーブルをダンプします
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
.2 番目のフィールドは、オブジェクトのサイズです。これは大丈夫です。
3 番目のフィールドの意味は何
00050011
ですか?これは、継承されたメソッドの数を示し、親オブジェクト クラスのメソッド
ToString
、Equals
、GetHashCode
およびを指しますFinalize
。これは正しいです?
私は他の分野を理解していないので、それらについても説明していただければ幸いです。