1

私が次のことを行うとしたら、ある変数から別の変数にオブジェクトをコピーしていると思いますか、それともオブジェクトへのポインターがコピーされている場所を参照していると思いますか。

myPanel:Panel;
myControl:Control;

myPanel := new Panel;

myControl := myPanel;

これが参照していない場合、myControlで設定を変更しても、myPanelの設定は変更されません。私はそれを言うのは正しいですか?

4

2 に答える 2

1

myPanel と myControl はどちらも参照です。割り当てを行うときは、参照から参照を作成するのではなく、参照をコピーしています。(必要に応じて、メモリ内のアドレスをコピーすると考えてください。)

ただし、メソッドを呼び出したり、myPanel または myControl のフィールドを設定したりすると、逆参照、つまり参照されたオブジェクトに作用します。myControl を使用したこの「設定の変更」(フィールドの設定を意味すると思います) は、myPanel によって参照される同じオブジェクトでそれらを変更します。

于 2013-03-05T15:08:31.303 に答える
1

.net では、ほとんどの型 (特に Windows コントロールのような複雑なもの) は参照型です。つまり、変数の値はオブジェクトへの単なる参照であり、それらの型の変数を割り当てるときは、オブジェクト全体ではなく参照をコピーしているだけです。大きな結果は、あなたの例では、2つが同じオブジェクトを参照しているため、変更myControlすると変更されるmyPanel(およびその逆)ということです。

念のため、ドキュメントを確認してください。オブジェクトの型がから継承する場合System.ValueType(または同様System.Enumに拡張ValueTypeされる)、それは値型であり、割り当て時に全体がコピーされます。それ以外の場合は参照型であり、参照をコピーしているだけです。

于 2013-03-05T15:08:56.980 に答える