Webを見て、私は(スレッドセーフな)シングルトン(C#で)を実装するこの単純なパターンを見てきました。シングルトン内のメンバー変数は静的として宣言する必要がありますか?
public sealed class MySingleton
{
private static readonly MySingleton _instance = new MySingleton();
private string[] _data = new string[10];
// Private constructor, so no outsiders have access.
private MySingleton()
{
// Initialize _data member here
}
// Static method to provide access to instance
public static MySingleton Instance
{
get { return _instance; }
}
public string GetStringCount
{
return _data.Length;
}
}
Iは_instance
部材は、それが静的Instance()
方法からアクセスされるので、静的として宣言する必要があることを理解します。
他のメンバーは静的として宣言する必要がありますか?定義によって、シングルトンは1回だけ存在するので、メンバーは静的変数が1回だけ存在するのと同じように、1回だけ存在することもできます(単一インスタンスの場合)。
_data
を静的と宣言する必要がありますか?
- 機能に違いはありますか?
- パフォーマンスの違いはありますか?
- 静的または非静的を好むその他の理由はありますか?
他のメンバーは、3行目に作成され、 '_instance'という名前の*オブジェクト*に関連しています。 '_data'を静的に指定すると、それはクラスメンバーであり、オブジェクトメンバーではありません。したがって、構文やベストプラクティスとは関係ありませんが、あなたの意図や目的には関係ありません。 – zerkms
@zerkms明らかに彼はそれを知っていますが、それはシングルトンなので、データはどちらか一方にしか存在しません。本当の違いはありません。 – harold
@njr静的クラスにインターフェースを実装させるための回避策としてシングルトンを使用していますか?(元の意図と一致するようにできるだけ静的なものをすべて保持します) – harold