为什么使用“new”关键字,创建的对象是指同一个对象?

时间:2013-09-16 10:17:40

标签: c# static

这些是我的课程:

namespace MyFirstGame
{
    public static class OstacoliManager
    {
        #region Dichiarazioni

        private static List<Ostacolo> ostacoli = new List<Ostacolo>();
        private static List<Ostacolo> oggettiSulloSchermo = new List<Ostacolo>();
        private static int objectCount = 20;
        private static Random rand = new Random();

        #endregion

        #region Metodi ausiliari

        public static void Inizializza()
        {
            oggettiSulloSchermo.Clear();
            for (int i = 0; i < objectCount; i++)
            {
                //Dalla lista degli ostacoli ne creo tot a caso. Lo faccio da ostacoli e non da texture per l'eventualità in cui abbiano dimensioni diverse ecc
                int randIndex = rand.Next(0, ostacoli.Count());
                Ostacolo o = new Ostacolo(
                    ostacoli[randIndex].Texture,
                    ostacoli[randIndex].Strada,
                    ostacoli[randIndex].DrawDepth
                );

                o.resetPosition();
                oggettiSulloSchermo.Add(o);
            }
        }

        ...

宣布“Ostacolo”类:

namespace MyFirstGame
{
    public class Ostacolo : GameObject
    {
        #region Dichiarazioni

        private Random rand = new Random();
        private Texture2D texture;

        #endregion

        #region Costruttore

        public Ostacolo(Texture2D texture, LayerDiSfondo strada, float profondita)
        {
           ...
        }

        #endregion

当我在第一段代码中调用函数“Inizializza()”时,特别是在我做的地方:

   Ostacolo o = new Ostacolo(...)

   oggettiSulloSchermo.Add(o)

          public void resetPosition()
    {
        WorldLocation = new Vector2(rand.Next(600, 3000), strada.doveCamminareY());
    }

 private Random rand = new Random();

我发现o每次都指向同一个对象! “新”关键字会创建一个新对象,不是吗?

1 个答案:

答案 0 :(得分:5)

您正在Random的每个实例中创建Ostacolo的新实例,您将在restPosition内使用“随机”定位每个实例。使此实例static解决出现的问题:

Random使用系统时间在内部初始化自己 - 所以当你在很短的时间内创建几个实例时(如你的情况),它们的行为可能完全相同!

有关详细信息,请参阅此帖子:RandomNumber method returns same number every time called