Здравствуйте, Аноним, Вы писали:
А>Есть некая система в которой есть группы некоторых объектов. Объекты внутри каждой группы должны уникально идентифицироваться (по крайней мере в пределах этой группы). Причем лучше (удобней и красивей) если это будет происходить автоматически, без участия пользователя этой системы.
А>Пробовал такой подход:
А>А>public SomeObject()
А>{
А>...
А> this.key = DataTime.Now.Ticks.ToString();
А>...
А>}
А>
А>Но эта фишка, как оказалось, не делает того что нужно — при создании подря нескольких объектов, их поле key инициализируется один и тем же значением. Что, как упоминалось выше, неприемлемо.
А>Какие здесь возможны подходы?
Можно сделать и так:
public class UniqueBase
{
private static long counter_;
private readonly long _id;
private static long CreateId()
{
return System.Threading.Interlocked.Add(ref counter_, 1);
}
protected UniqueBase()
{
_id = CreateId();
}
public long ID
{
get { return _id;}
}
}
public sealed class Foo : UniqueBase
{
public override string ToString()
{
return ID.ToString();
}
}
Наследуешься от UniqueBase и при создании нового экземпляра будет гарантированно уникальное число (я думаю что диапазона long должно хватить).