4

MSDN からは、「値の型はスタックまたはインラインに割り当てられます」と書かれています。

「インラインで割り当て」とは、宣言された直後に値型を割り当てることができることを意味しますか? ヒープで宣言されている場合、次のヒープスロットに割り当てられますか?

では、なぜ「構造内」と書かれているのでしょうか。

アップデート

「構造」が具体的に「構造」を意味する場合、「クラス」に関して何も言及されていないのはなぜですか? のフィールドとしてClass、スタック上にもインラインにもありませんstruct(インラインではインラインですclass)。

4

2 に答える 2

3

それらは、構造体にインライン割り当てられるため、構造体にすでに割り当てられているメモリの一部として割り当てられます。

見る:

http://msdn.microsoft.com/en-us/library/system.valuetype.aspx

ネストされた値型がある場合、内部型は、それを含む型にすでに割り当てられているメモリに割り当てられます。

struct Inner
{
    public int A;
}

struct Outer
{
    public Inner I;
    public int B;
}

Outer o = new Outer();
o.I = new Inner();

のメモリIは、のインスタンスに割り当てられたメモリにインラインで割り当てられますOuter

于 2012-04-27T22:11:00.140 に答える
1

構造体を考える最も簡単な方法は、ダクト テープでくっつけられた格納場所のグループです。変数またはフィールドを宣言することPoint foo;は、基本的にはint Point_X; int Point_Y;. foo = bar;両方とも type である場合、と言うのPointは、本質的に と言うのと同じfoo_X = bar_X; foo_Y = bar_Y;です。構造体を値パラメーターとして渡すことは、基本的に、そのすべてのフィールド (パブリックおよびプライベート) を値パラメーターとして渡すことと同じです。

構造体がダクトテープでくっついたフィールドのグループ以上のものである 2 つの構造的な方法と 1 つの主に構文的な方法があります。

  1. 構造体を「byref」パラメーターとして渡すことができます。この場合、システムは 1 つの参照を格納場所のグループ全体に渡します (格納場所を個別に渡すのとは異なり、値渡しの場合に効果的に行われます)。
  2. 構造体型の配列の各スロットは、すべての格納場所を一緒に保持するため、「Point foo[];」は「int foo_X[];」とは大きく異なります。int foo_Y[];`. 前者の宣言は要素ごとに 2 つの格納場所を持つ 1 つの配列を表し、後者は要素ごとに 1 つの格納場所を持つ 2 つの配列を表します。
  3. メソッドとプロパティを構造体に関連付けて、それらのメソッドとプロパティを介してのみアクセスできる構造体フィールドを定義するか、構造体のすべてのフィールドに対して代入などの操作を一緒に実行することによってのみアクセスできるようにすることができます。

クラス型は構造体とは大きく異なります。フィールド P と Q を持つクラスを宣言し、そのクラス型の格納場所を宣言すると、その格納場所は 2 つのもの (P と Q) を保持しません。保持するものは 1 つだけです。別の場所に格納され、フィールド P と Q を持つオブジェクトへの参照です。

于 2012-05-17T21:31:27.980 に答える