C#中变量之间的歧义

slo*_*ker 8 c#

我想首先说我先搜索过,并在其他各种事情上发现了很多类似的问题,但这个问题并不完全正确.

我有这个代码:

namespace New_Game.GameClasses
{
    /// <summary>
    /// This is a game component that implements IUpdateable.
    /// </summary>
    public class Error : Microsoft.Xna.Framework.GameComponent
    {
        bool gameOver = false;
        List<Enemy> enemies = new List<Enemy>();

        public bool gameOver {
            get { return gameOver; }
            set { gameOver = value; }
        }

        public override void Update(GameTime gameTime, Vector2 target)
        {
            // TODO: Add your update code here
            Rectangle playerRect = new Rectangle((int)target.X, (int)target.Y, 64, 64);

            foreach (Enemy e in enemies)
            {
                e.Target = target;
                e.Update(gameTime);
                Rectangle enemyRect = new Rectangle((int)e.Position.X + 7, (int)e.Position.Y + 7, 32 - 7, 32 - 7);

                if (playerRect.Intersects(enemyRect))
                {
                    gameOver = true;
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题出现了这样一个错误:'New_Game.GameClasses.Error.gameOver'和'New_Game.GameClasses.Error.gameOver'之间存在歧义

如果我删除了get/set方法,当我尝试从我的Game1.cs访问gameOver时,我遇到了一个不同的错误.如果我将其更改为以下内容,我会收到同样的错误:

public bool gameOver { get; set; }
Run Code Online (Sandbox Code Playgroud)

我的问题是,我该如何解决歧义错误?

sge*_*des 23

您需要重命名您的私人gameOver变量.改变这个:

bool gameOver = false;
public bool GameOver {
        get { return gameOver; }
        set { gameOver = value; }
    }
Run Code Online (Sandbox Code Playgroud)

bool _gameOver = false;
public bool GameOver {
        get { return _gameOver; }
        set { _gameOver = value; }
    }
Run Code Online (Sandbox Code Playgroud)

您不能在单个类中使用相同的变量名称.

或者,假设您使用的是最新版本的.Net,您可以删除您的私有变量,只需:

public bool GameOver { get; set; }
Run Code Online (Sandbox Code Playgroud)

祝好运.

  • +1.此外,以下默认的C#命名指南可以避免这样的问题(大写为属性 - "GameOver",私有字段的小写 - "bool gameOver;"). (7认同)