0

重複の可能性:
クラスのフィールド、それらはスタックまたはヒープに格納されていますか?

スタックとヒープに関する記事を読んでいました(知識を更新するためだけに)。

私の知る限り、参照型(クラス)内に値型を作成すると、値型もヒープに格納されます。格納される値型がどこにあるかは、その作成場所によって異なるためです。

しかし、アプリケーション(WPF / Silverlightなど)を作成するとき、UserControl、ViewModelを作成するとき、それらはクラス(オブジェクト)の参照型でもありませんか?

だから私はちょっと不思議に思うので、UserControlとViewModel内で何を作成しても、ヒープに含まれるのでしょうか?

4

2 に答える 2

3

だから私はちょっと不思議に思うので、UserControlとViewModel内で何を作成しても、ヒープに含まれるのでしょうか?

ええそれはそうです。はUserControlクラスであるため、そのメモリとその中の変数はヒープに格納されます。

ここには2つのことがあります。

  1. これは純粋に実装の詳細です。メモリがどこに保存されているかは、実際には重要ではありません。使用法のセマンティクスは本当に重要です(つまり、メソッドに渡すと、オブジェクト全体ではなく、参照がコピーされるだけです)。
  2. 変数値は、使用時にスタックにコピーされる場合があります。詳細については、クラス内に格納されたフィールドで何が起こるかを詳しく説明しているEric Lippertによるこの(非常に詳細な)回答を参照してください。
于 2012-09-05T20:29:29.657 に答える
1

はい、UserControlのクラスと、それに含まれるすべてのプロパティ値(それらの多くは値型ですが)はヒープに格納されます。

スタックとヒープについてはあまり心配しないでください。通常、次のことを知っていれば十分です。

  • スタックに格納されているオブジェクト(IntPtr値型であるヒープ上のオブジェクトへの参照を含む)は、範囲と存続期間が、スタックフレームが作成された呼び出しスタックのレイヤーに制限されます。
  • ヒープに格納されているオブジェクトのスコープと存続期間は、スタックまたはヒープ上のそのオブジェクトへの参照のスコープと存続期間に制限されます。

今すぐコードを実行します:)

于 2012-09-05T20:32:03.423 に答える