あなたの混乱は、変数をオブジェクトと同一視している可能性があると思います。変数は実際にはオブジェクトではなく、オブジェクトへの単なるポインター (参照) です。New
オペレーターは新しい変数を作成するのではなく、新しいオブジェクトを作成します。演算子は変数とは関係がないNew
ため、呼び出しを行うことなく、必要な数の変数を宣言できます。New
単一のオブジェクトは、任意の数の変数によって参照できます。たとえば、次のようになります。
Dim variable1 As StringBuilder ' Declare a new variable
Dim variable2 As StringBuilder ' Declare a new variable
' At this point, both variables are null (Nothing) because
' they do not reference/point to any object yet
variable1 = New StringBuilder() ' Create a new object and set variable1 to reference it
variable2 = variable1 ' Set variable2 to reference the same object as variable1
variable2.AppendLine("Hello world")
Console.WriteLine(variable1.ToString()) ' Writes "Hello World"
上記のコードでわかるように、変数 2 にテキストを追加しても、変数 1 にも影響がありました。これは、変数自体ではなく、変数が指すオブジェクトに対して追加が実行されたためです。したがって、両方の変数が同じオブジェクトを指しているため、両方に同じテキストが含まれており、そのオブジェクトに対して行われた同じ変更が表示されます。
New
したがって、新しい変数を宣言するたびに呼び出す必要はありません。多くの場合、既に存在するオブジェクトを参照するための変数が必要です。演算子を使用する必要があるのNew
は、新しいオブジェクトを作成する必要があるときだけです。したがって、コードでは、最初の行で新しいスプライト オブジェクトを作成し、それを参照する変数を設定する必要があります。openweb
ただし、2 行目では新しいオブジェクトを作成する必要はありません。メソッドによって返されるオブジェクトを参照するための変数が必要なだけです。openweb
おそらく、そのメソッド内のどこかで、内部的にNew
演算子を使用して新しいオブジェクトを作成し、それを返します。
ただし、私が言ったことはすべて「参照型」(クラス) にのみ適用されることに注意してください。Integer、Boolean、Date などの「値型」(構造) には当てはまりません。参照型と値型の違いについて調査することをお勧めします。