2

次のような静的プロパティがあるとします。

public static object MyProperty
{
   get { return new object(); }
}

上記のプロパティは同じですか?

private static object my_filed = new object();

public static object MyProperty
{
   get { return my_filed; }
}

つまり、静的プロパティを呼び出すたびに新しいオブジェクトが作成されますか、それとも初めて作成されますか?

4

5 に答える 5

3

プロパティゲッターは、プロパティが読み取られるたびに実行されるため、毎回新しいオブジェクトインスタンスが作成されます。

于 2012-12-16T19:13:12.320 に答える
2

2つのメカニズムは異なります。最初のものでは、毎回新しいオブジェクトを作成します。

クラス定義に関連付けられていますStatic methods/variablesが、静的メソッド内に記述されたコードは、メソッドが呼び出されるたびに実行されます。この例では、新しいオブジェクトインスタンスを作成するステートメントを記述しているため、メソッドが呼び出されるたびに新しいオブジェクトインスタンスが作成されます。

于 2012-12-16T19:13:58.740 に答える
2

いいえ、ちがいます。

public static object MyProperty
{
   get { return new object(); }
}

オブジェクトの新しいインスタンスが毎回返されますが、これはおそらくあなたが望むものではありません。

private static object my_filed = new object();

public static object MyProperty
{
   get { return my_filed; }
}

クラスオブジェクトの同じインスタンスが毎回返され、シングルトンになります。

于 2012-12-16T19:14:17.937 に答える
1

静的プロパティは静的メソッドに似ています。アクセスする複合名を使用します。静的プロパティは、インスタンスプロパティと同じgetおよびsetトークンを使用します。プログラムでは、最初のケースで毎回新しいオブジェクトが作成されます。2番目ではありません。

于 2012-12-16T19:15:33.357 に答える
1

正解を知るには、プロパティが何であるかを知る必要があります。プロパティは、あなたから隠されているメソッドに他なりません。

だからvar myVar = MyClass.MyProperty、他に何もありませんvar myVar = MyClass.get_MyProperty()。だからあなたが電話するとき:

public static Object MyProperty
{
    get { return new Object(); }
}

毎回新しいオブジェクトを作成するメソッドを呼び出しています。したがって、答えはノーです。コードは同じではありません。静的修飾子は他のことをします

于 2012-12-16T19:17:48.480 に答える