Tekil benzeri bir sınıfı uygulamaya koymayı deniyorum. Programın başlangıcından itibaren her 5 saniyelik periyotta oluşturulan örnekler, normal bir tekilde olduğu gibi aynı olmalıdır ve farklı 5 saniyelik açıklıklar arasında farklı tekil örnekleri olmalıdır. Buraya geldiğim şey, normal statik örnek alanı yerine, tekil örneklerini depolayan bir listedir. Ancak hala test ettiğimde aynı örneği alıyorum. İşte kod:Zaman tabanlı yaşam süresi olan Singleton
class Program
{
static void Main(string[] args)
{
TimedSingleton t1 = TimedSingleton.Instance();
Thread.Sleep(5500);
TimedSingleton t2 = TimedSingleton.Instance();
Console.WriteLine(t1 == t2);
Console.ReadKey();
}
}
class TimedSingleton
{
private static ArrayList _instancesArrayList = new ArrayList();
private static List<int> AddedPositions = new List<int>();
private static DateTime _startTime = DateTime.Now;
protected TimedSingleton()
{
}
public static TimedSingleton Instance()
{
int index = (int) DateTime.Now.Subtract(_startTime).TotalSeconds%5;
if (AddedPositions.Count == 0)
{
_instancesArrayList.Add(new TimedSingleton());
AddedPositions.Add(index);
return (TimedSingleton)_instancesArrayList[index];
}
if (AddedPositions.Contains(index))
{
return (TimedSingleton) _instancesArrayList[index];
}
AddedPositions.Add(index);
_instancesArrayList.Add(new TimedSingleton());
return (TimedSingleton) _instancesArrayList[index];
}
}
Sonuç: true
nasıl her 5 saniyelik zaman için ayrı örnekleri dönmek için düzeltebilirim ?
Bu harika, çok teşekkürler. Aslında sonunda Sözlük'ü kullanarak bitirdim, ama 5'in yerine bölümün yerine geçen bölüm benim için onu mahvediyordu ve nedenini bulamadım, bunun için teşekkürler. – Marcin