增加构造函数中的唯一ID号

iva*_*lee 10 c# constructor auto-increment

我正在使用C#中的一个对象,我需要对象的每个实例都有一个唯一的id.我对此的解决方案只是放置一个成员变量,我在类中和我将拥有的构造函数中调用idCount:

objectID = idCount;
idCount++;
Run Code Online (Sandbox Code Playgroud)

我认为这可以解决我的问题,但似乎idCount永远不会增加,即使构造函数被多次调用.例如,如果idCount = 1,则所有对象的objectID仍为1.为什么idCount ++不起作用?

任何帮助,将不胜感激.抱歉,如果我的解释不充分,我不确定如何解释它.

com*_*ech 26

您需要在类中使用静态属性,但是,如果希望每个对象都包含它创建的id,则需要将其分配给类中的实例变量.

此外,如果要同时更新多个实例,则需要在计数器上使用Interlocked.Increment:

    public class Foo
    {
        private static int m_Counter = 0;

        public int Id { get; set; }

        public Foo()
        {
            this.Id = System.Threading.Interlocked.Increment(ref m_Counter);
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • @DannyChen:它可能更简单,但它并不安全.有关更多详细信息,请参阅此讨论:http://stackoverflow.com/questions/154551/volatile-vs-interlocked-vs-lock (2认同)

Bro*_*n98 2

您可以在类中使用静态变量,该变量会在对象初始化时更新。

public class Foo
{
   private static int ID = 0;
   private int myId = 0;

   public int MyId
   {
      get { return myId; }
   }

   public Foo()
   {
       ID++;
       this.myId = ID;
   }
}
Run Code Online (Sandbox Code Playgroud)