En supposant que vous souhaitiez simplement renvoyer une valeur entière unique et incrémentée, l'approche sûre la plus simple consiste probablement à utiliser un compteur statique privé et un objet de verrouillage statique privé. Quelque chose comme :
private static int s_UniqueCounter; // starts at 0 by default
private static readonly object s_UniqueCounterLock = new object();
public static int GetUnique()
{
lock (s_UniqueCounterLock)
{
s_UniqueCounter++;
return s_UniqueCounter;
}
}
C'est à vous de vous assurer que l'objet verrou particulier est utilisé pour protéger tout autre accès au membre compteur statique (c'est pourquoi ils sont déclarés privés, bien sûr, afin que la classe qui les possède contrôle tout accès). Il ne devrait probablement pas être accédé ailleurs, pour cette utilisation, mais vous pourriez avoir quelque chose à regarder la valeur actuelle pour voir combien de fois il a été appelé. Cela devrait probablement être protégé par le verrou également (pour s'assurer que le résultat est actuel) :
internal static int QueryUniqueCount() // or this could be private, or public
{
lock (s_UniqueCounterLock)
{
return s_UniqueCounter;
}
}