状態変数を含むクラスにSingleton
またはStatic
を使用するかどうかを選択する際に問題がたくさんあります。私は、クラスオブジェクトがインスタンス化して1つだけ存在することを望んでいました。C#はシングルトンに静的メソッドを含める必要がありますか?
私は両方の方法が状態変数を格納できることを知っています。 Static
クラスはすべてのメソッドがstatic
になるため、変数を扱うのが容易だと思われます。それ以上の作業は行わずに変数static
にアクセスできます。
ただし、Singleton
の場合はこのケースが異なります。私には両方の方法があります。 Singleton
の変数Instance
にアクセスする必要があるもの、およびInstance
変数にアクセスすることができないもの(静的とマークすることができます)。
アン例:
/// <summary>Singleton.</summary>
public sealed class Singleton
{
private static readonly Singleton instance = new Singleton(); /// <summary>Instance.</summary>
public static Singleton Instance { get { return instance; } }
private int integer; /// <summary>Integer.</summary>
public int Integer { set { integer = value; } get { return integer; } }
/// <summary>Constructor.</summary>
private Singleton() { }
/// <summary>TestA</summary>
public void TestA(int val)
{
Integer = val;
}
/// <summary>TestB</summary>
public static int TestB(int val)
{
return Instance.Integer * val;
}
/// <summary>TestC</summary>
public static int TestC(int val)
{
return val * val;
}
}
上記の例から、3つの方法があります。 TestA
,TestB
およびTestC
である。
TestA
は、そのプロパティにアクセスできるインスタンスメソッドです。TestB
はstatic
メソッドですが、Instance
にアクセスしてそのプロパティを取得します。TestC
は、static
メソッドで、インスタンスには使用されません。
これは質問頼む:
Singleton
のみstatic
方法、およびstatic
Instance
プロパティを経由することによって、そのInstance
プロパティとメソッドへのアクセスが含まれているべきか?つまり、すべての方法はTestB
またはTestC
に似ています。Singleton
にはnon-static
の方法しか含まれていないと、Instance
が必要かどうかは関係ありませんか?すべての方法はTestA
に似ています。Singleton
には、static
とnon-static
(この場合、TestA
とTestB
種類)の両方の方法が混在する必要がありますか?私はそれがむしろ乱雑になると信じています。- そうでない場合、どうすればよいですか?私は
Singleton
のアイデアをダンプする必要がありますし、すべてstatic
と一度だけインスタンス化されるすべてのクラスのために行くか?
編集:同様の質問では、Singleton
もInstance
の横にある任意のStatic
変数/フィールド/プロパティが含まれている必要がありますか?
私は、ありがとうございます! – Kei