C#保存多个值

时间:2015-02-04 09:38:13

标签: c#

我有一个班级:

class Entity
{
    private String question;
    private String answer;
    private static int length;

    Crosswords cr = new Crosswords();

    public Entity(int posX, int posY, int direction)
    {
        length = cr.getSpaceLength(posX, posY, direction);
    }

    public int getLength()
    {
        return length;
    }
}

在另一个类中,我正在创建一个像这样的实体数组:

Entity[] et = new Entity[100];

然后我有一个计算长度的算法,我想保存每个实体的长度,但之后,当我这样做时:

for(int i=0; i<100; i++)
    Console.WriteLine(et[i].getLength());

我为所有实体(最后一个实体的长度)获得相同的长度,但是我为它们设置了不同的长度。为什么会这样?我需要做些什么来为每个实体保存不同的长度?

P.S。

我像这样创建实体:

for(int i=0; i<100; i++)
    et[i] = new Entity(somevalueX, somevalueY, direction);

3 个答案:

答案 0 :(得分:4)

从长度中移除静电或更好地执行此操作,在需要时计算长度。

class Entity
{
    private String question;
    private String answer;
    private int _posX;
    private int _posY;
    private int _direction;
    Crosswords cr = new Crosswords();

    public Entity(int posX, int posY, int direction)
    {
        _posX = posX;
        _posY = posY;
        _direction = direction;
    }

    public int getLength()
    {
        return cr.getSpaceLength(_posX, _posY, _direction);
    }
}

答案 1 :(得分:2)

长度是静态成员,所有对象都有一个变量。如果你想为每个对象分开,它不应该是静态的。

更改

private static int length;

private int length;
  

只有一个静态成员的副本存在,无论有多少   创建了类的实例MSDN

在给定情况下预先计算所有对象的长度似乎并不值得。您可以在需要时计算并返回长度。我更愿意为length而不是方法创建一个属性。

class Entity
{
   private String question;
   private String answer;
   private int posX;
   private int posY;
   private int direction;
   Crosswords cr = new Crosswords();

  *//Make length a public property*
  public int Length 
  { 
      get { return cr.getSpaceLength(posX, posY, direction);} 
      private set;
  } 

  *//Assign the values to private members for later use.*
  public Entity(int posX, int posY, int direction)
  {
      this.posX = posX;
      this.posY = posY;
      this.direction = direction;
  }
}

答案 2 :(得分:0)

此行为的原因是您已将长度字段声明为静态。

  

虽然类的实例包含所有实例的单独副本   该类的字段,每个静态字段只有一个副本。

https://msdn.microsoft.com/en-us/library/98f28cdx.aspx