私が次のことを行うとしたら、ある変数から別の変数にオブジェクトをコピーしていると思いますか、それともオブジェクトへのポインターがコピーされている場所を参照していると思いますか。
myPanel:Panel;
myControl:Control;
myPanel := new Panel;
myControl := myPanel;
これが参照していない場合、myControlで設定を変更しても、myPanelの設定は変更されません。私はそれを言うのは正しいですか?
myPanel と myControl はどちらも参照です。割り当てを行うときは、参照から参照を作成するのではなく、参照をコピーしています。(必要に応じて、メモリ内のアドレスをコピーすると考えてください。)
ただし、メソッドを呼び出したり、myPanel または myControl のフィールドを設定したりすると、逆参照、つまり参照されたオブジェクトに作用します。myControl を使用したこの「設定の変更」(フィールドの設定を意味すると思います) は、myPanel によって参照される同じオブジェクトでそれらを変更します。
.net では、ほとんどの型 (特に Windows コントロールのような複雑なもの) は参照型です。つまり、変数の値はオブジェクトへの単なる参照であり、それらの型の変数を割り当てるときは、オブジェクト全体ではなく参照をコピーしているだけです。大きな結果は、あなたの例では、2つが同じオブジェクトを参照しているため、変更myControl
すると変更されるmyPanel
(およびその逆)ということです。
念のため、ドキュメントを確認してください。オブジェクトの型がから継承する場合System.ValueType
(または同様System.Enum
に拡張ValueType
される)、それは値型であり、割り当て時に全体がコピーされます。それ以外の場合は参照型であり、参照をコピーしているだけです。