C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: インスタンスのメソッドのメモリ上の位置


(過去ログ 124 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■74093 / inTopicNo.1)  インスタンスのメソッドのメモリ上の位置
  
□投稿者/ 大塚 (1回)-(2014/11/29(Sat) 22:35:35)

分類:[C#] 

こんにちは。

C#のクラスについて理解を深めたく、質問させていただきます。
例えば、
public class A
{
public void methodA {}
public int propertyA;
}
というクラスがあったとします。

ここで、
{
var a1 = new A();
var a2 = new A();

a1.methodA();
a2.methodA();
}
というコードがあったとして、クラスAのインスタンスa1, a2はそれぞれメモリ上の別の位置に確保されていることは理解できています。
しかし、コード中で呼び出されているmethodAというメソッドの、処理内容本体はメモリ上のどの位置に存在しているのかが気になっています。

a1のmethodA, a2のmethodAは、メモリ上の同じ位置に存在しているのか、それともインスタンス毎にmethodAの位置も異なっているのかが、今回の質問です。
よろしくお願いします。
引用返信 編集キー/
■74095 / inTopicNo.2)  Re[1]: インスタンスのメソッドのメモリ上の位置
□投稿者/ Azulean (377回)-(2014/11/29(Sat) 23:10:24)
No74093 (大塚 さん) に返信
> a1のmethodA, a2のmethodAは、メモリ上の同じ位置に存在しているのか、それともインスタンス毎にmethodAの位置も異なっているのかが、今回の質問です。

同じ位置です。
MethodTable という形でクラス(型)の情報がメモリ上に存在し、メソッドのアドレス一覧もそこに格納されています。
型ごとに1つであり、インスタンスごとではありません。


コンパイラが勝手に引数に this を渡しており、メンバー変数やメンバー関数へのアクセスはその隠された引数を使っていると考えていただくとわかりやすいかもしれません。
引用返信 編集キー/
■74096 / inTopicNo.3)  Re[2]: インスタンスのメソッドのメモリ上の位置
□投稿者/ 大塚 (2回)-(2014/11/29(Sat) 23:46:30)
No74095 (Azulean さん) に返信

なるほど、とてもよくわかりました。
ありがとうございます。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -