は、次のように私はC#のシングルトンクラスを持っていると言う:C#.NET Singletonクラスの静的メソッドは、パフォーマンスやメモリ消費に悪影響を及ぼしますか?簡単な例として
using System.Collections.Generic;
public sealed class RestrictedNameCollection : List<string>
{
private static object _lock = new object();
private RestrictedNameCollection()
{
}
private static RestrictedNameCollection _instance;
public static RestrictedNameCollection Instance
{
get
{
if (_instance == null)
{
lock (_lock)
{
if (_instance == null)
{
var nameList = new List<string>();
nameList.Add("Jack");
nameList.Add("Jill");
nameList.Add("John");
nameList.Add("Jane");
var restrictedNameCollection = new RestrictedNameCollection();
foreach (var name in nameList)
{
restrictedNameCollection.Add(name);
}
_instance = restrictedNameCollection;
}
}
}
return _instance;
}
}
}
私はクラスに次の2つの方法をIsRestrictedName(string name)
メソッドを追加することができます。
public bool IsRestrictedName(string name)
{
return Contains(name);
}
または:
public static bool IsRestrictedName(string name)
{
return Instance.Contains(name);
}
私はRestrictedNameCollection.Instance.IsRestrictedName("Jack")
を呼び出すことにより、最初のバージョンを使用することができます。しかし、私はそれを簡潔にするために第二のバージョンRestrictedNameCollection.IsRestrictedName("Jack")
を呼び出すことができることを好む。
私の質問は、私がメソッドの静的バージョンから離れなければならない理由はありますか?これは純粋に統語論的な議論ですか?または、私が心配しなければならない基本的なパフォーマンスの影響がありますか?
インスタンスを知らなくてもインスタンスメソッドを呼び出すことはできません。これはInstanceプロパティゲッターの使用を必要とします。だからあなたはそれをどちらかの方法で支払うでしょう。少なくとも、if()ステートメント本体を別のメソッドに移動して、プロパティゲッターをインライン化できるようにします。実際には、静的なコンストラクタを代わりに使用してください。 –
次に、なぜ静的クラスの代わりにシングルトンを使用しますか? –