2017-01-11 3 views
-1

構造体はC#の値型であり、stringは参照型です。私はメモリ割り当てとマッピングの違いを知っていますが、C#参照型が値型の中にどのように格納されているのかよくわかりません。次の構造の中に文字列があるとしましょう。 構造内の参照型が作成されている場合ヒープ上で構造体がパラメータとして関数に渡されたときにヒープのデータをどのように管理するか。参照型内部.NETの値型

文字列はスタックまたはヒープ上に作成されますか?

私は.NETは構造体の内部POINTCのオブジェクトを管理しない方法を機能させる構造体ポイントのオブジェクトを渡す場合。 PointCがヒープ上に作成された場合、関数にstuctを渡すことは、クラスと同じ記憶を持ちますか?

public class PointC 
    { 
     ... 
     ... 
    } 
    public struct Point 
    { 
     PointC obj; 
    } 
+0

文字列がヒープ上にあり、*参照*がスタック上にあると推測します。そのような区別は、C#では一般的に有用ではありません。 – BradleyDotNET

+7

'メモリ割り当てとマッピングの違いを知っています'あなたの質問は、あなたが実際にそのことを知っていないことを示しています。 – Servy

+1

@BradleyDotNET値の型がスタックに入るという考えを広めることは、値の型はスタックには行きません。問題の変数の格納場所がどこにあっても、スタック、ヒープ、またはその両方を含め、どこにでも置くことができます。 – Servy

答えて

1

リファレンスはスタック上に作成されます(具体的には、構造体の場所になります)。

参照にはデフォルト値(null)が設定されているため、構造体作成時にStringオブジェクトは作成されません。

文字列コンストラクタを使用して文字列を割り当てると、Stringオブジェクトと文字列バッファがヒープに作成されます。