1

オブジェクトをメソッドに渡すと、「値で」渡されると言われています。私はそれを調べるために少しテストをしました:

Point p = new Point(1, 1);
Circle c = new Circle(p);
p.x = 999;
Console.WriteLine(c.p.x);

上記のコードは「999」を出力しますが、オブジェクトはメソッド
にコピーされると思いました。「ref」(または「out」)を使用していない場合、メソッド
はオブジェクトの値を取得すると言われています。

誰かが私にそれを明らかにすることができますか?
ありがとう、
socksocket

4

4 に答える 4

3

それ自体がコピーされるのでPointはなく、クラスとして宣言されていると仮定すると、への参照がコピーされます。したがって、それはまだ値を渡します。参照の値を渡します。pp

言うときPoint p = new Point(1, 1);(そしてポイントが参照型である場合)、それはを含む変数であると思うかもしれませんが、実際には、別の場所に格納されているPointへの参照を含む変数です。Point

于 2012-06-04T12:14:45.537 に答える
1

C#は値渡しです-参照値は通常の場合、つまり、渡されます。(これは、同じオブジェクトへの新しい参照であることを意味します)

于 2012-06-04T12:13:55.687 に答える
1

Pointは構造体であるため、値によって渡されます。

于 2012-06-04T12:14:00.760 に答える
1

.NETには、参照型値型の2つの型のカテゴリがあります。

構造体は値型であり、クラスは参照型です。

一般的な違いは、参照型はヒープ上に存在し、値型はインライン上に存在することです。つまり、変数またはフィールドが定義されている場所はどこでもです。

値型を含む変数には、値型の値全体が含まれます。構造体の場合、これは、変数に構造体全体とそのすべてのフィールドが含まれていることを意味します。

参照型を含む変数には、実際の値が存在するメモリ内の別の場所へのポインタまたは参照が含まれています。

これには、最初に1つの利点があります。

  • 値型には常に値が含まれます
  • 参照型にはnull参照を含めることができます。つまり、現時点では何も参照していません。

内部的には、参照型はポインターとして実装されており、それを知っていて、変数の代入がどのように機能するかを知っていると、他の動作パターンがあります。

  • 値型変数の内容を別の変数にコピーし、内容全体を新しい変数にコピーして、2つを区別します。つまり、コピー後、一方を変更しても他方には影響しません。
  • 参照型変数の内容を別の変数にコピーすると、参照がコピーされます。つまり、実際のデータの別の場所に同じものへの2つの参照があります。つまり、コピー後、一方の参照のデータを変更すると、もう一方の参照にも影響を与えるように見えますが、これは、両方の場所で同じデータを見ているだけだからです。

変数またはフィールドを宣言する場合、2つのタイプの違いは次のとおりです。

  • 変数:値型はスタック上に存在し、参照型は実際のメモリが存在するヒープメモリ内のどこかへのポインタとしてスタック上に存在します
  • class / struct-field:値型はクラス内に存在し、参照型は実際のメモリが存在するヒープメモリ内のどこかへのポインタとしてクラス内に存在します。

MSDNを参照してください。このチュートリアルは、円/点/軸の例に似ています。

于 2012-06-04T12:18:01.123 に答える