この質問はあまりにも漠然としているかもしれませんが、私はそれにショットを与えると思いました。私は大規模な.NETプロジェクトを継承し、以前は見たことのないいくつかの事柄にぶつかってきました。私が持っている最も緊急の質問は、これら2つの宣言の違いは何でしょうか?両方とも動作し、両方の型は既存のコードで使用されていますが、パフォーマンスやセキュリティ上の理由から、どちらか一方を他のものよりも使用する必要があるのだろうかと思います。GetInstance <t>とNew tの相違点
var mgr = ManagerFactory.GetInstance<CustomerNotificationManager>();
対
CustomerNotificationManager cNotificationMgr = new CustomerNotificationManager();
内の任意の方法のために使用することができるCustomerNotificationManager
クラスのインスタンスで両方の結果。
私の質問に(うまくいけば)答えるための情報が必要な場合は教えてください。また、この質問が「答える」場合は、より良いタイトルを提案してください。
public class ManagerFactory
{
private static bool singleton = false;
private static Dictionary<string, ManagerBase> instanceHolder = new Dictionary<string, ManagerBase>();
public static bool Singleton
{
get { return ManagerFactory.singleton; }
set { ManagerFactory.singleton = value; }
}
public static T GetInstance<T>() where T : ManagerBase, new()
{
if (singleton)
{
return getSingletonInstance<T>();
}
else
{
return new T();
}
}
private static T getSingletonInstance<T>() where T : ManagerBase, new()
{
lock (instanceHolder)
{
Type genericType = typeof(T);
if (instanceHolder.ContainsKey(genericType.ToString()))
return instanceHolder[genericType.ToString()] as T;
else
{
var instance = new T();
instanceHolder.Add(genericType.ToString(), instance);
return instance;
}
}
}
}
'ManagerFactory.GetInstance'のコードをチェックすると、' new CustomerNotificationManager() 'だけではないかもしれません。また、その工場がある場合は理由があります。 –
@ChetanRanpariya私は 'ManagerFactory'クラスを追加しました。シングルトンを返すようだが、Davidの答えはちょっと助けになったが、私はまだ混乱している。 – TheValyreanGroup
混乱は何ですか?シングルトンを理解していれば、オブジェクトの作成方法ではなく、アプリケーションのライフサイクル全体でクラスのインスタンスを1つだけ作成する方法を明確にする必要があります。 –