一方、インターネットで読んでいると、静的変数は常に同じメモリアドレスを持っていることがわかりました。したがって、プログラムをコンパイルするときに、コンパイラは静的変数に割り当てるメモリアドレスを決定します。あなたがするときに何が起こるかについて私に考えさせた読書:
class Foo {}
class Program
{
public static Foo someStaticVar;
static void Main(string[] args)
{
Foo localVariable = new Foo();
int x = 4;
someStaticVar = localVariable; // is someStaticVariable still will have the same address?
}
// variable x will be pushed of the stack
// localVariable will be pushed of the stack
// what happens then with someStatic var?
}
また、メソッド内で変数を宣言すると、作成時にスタックにプッシュされ、メソッドが戻るときにスタックからポップアウトされることも学びました。それがすべて当てはまる場合、someStaticVarは消えるはずですが、消えません。
私は何かを間違って理解しなければならないと確信しています。あるいは、オンライン someStaticVar = localVariable;
でそのオブジェクトのディープコピーを実行しているかもしれませんが、オブジェクトのディープコピーを実行する方法についてインターネット上に多くの質問があり、このアプローチとは大きく異なるため、私はそれを疑っています。