6

次のクラスがある場合:

public class MyClass { public static int MyStaticInt = 0; }

1つのソリューションでMyNameSpace.MyClass.MyStaticInt、2つの異なるアセンブリで参照している場合、同じ変数を参照していますか?

4

6 に答える 6

6

静的状態はデフォルトでスコープごとにスコープされ、属性AppDomainを使用する場合はスレッドごとに構成できます。ThreadStatic

これは、アセンブリが同じプロセスで実行されていて、プロセスにアプリケーション ドメインが 1 つしかない場合に、仮定が有効であることを意味します。

于 2012-10-09T08:51:21.657 に答える
5

static文脈に応じていくつかのことを意味します。

  • デフォルトでは、 ごとに値のインスタンスを 1 つ取得しますAppDomain
  • 属性で装飾されている場合ThreadStatic、スレッドごとに値のインスタンスを 1 つ取得します。
  • ジェネリック クラスに含まれている場合は、具象型ごとに値のインスタンスを 1 つ取得します。

サンプルコードでは、最初の条件が当てはまるようです。いずれの場合も、データが定義されている特定のアセンブリに違いはありません。

于 2012-10-09T08:54:10.363 に答える
1

はい、クラスごとのプロセスごとに 1 つのインスタンスしかありません。

これに対する小さな注意点は、ジェネリック クラスのインスタンスごとに変数のインスタンスが 1 つあるジェネリック クラスがある場合です。つまり、MyGenericClass のインスタンスが 1 つ、MyGenericClass のインスタンスが 1 つになります。

編集

実際には、AppDomain ごとに 1 つのインスタンスがあるため、AppDomain の複数のコピーを自分で作成することにより、複数のコピーを作成できます。

于 2012-10-09T08:51:08.600 に答える
0

いいえ、 MyClass.MystaticInt はクラス MyClass に対してのみローカルです。

于 2012-10-09T08:53:26.773 に答える