2013-01-17 69 views
5

我想先說我先搜索了一下,發現了很多類似的問題,但在其他各種事情上卻沒有發現這個問題。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; 
       } 
      } 
     } 
    } 
} 

我的問題來自於一個錯誤說的: 'New_Game.GameClasses.Error.gameOver' 和 'New_Game.GameClasses.Error.gameOver'

之間的模糊如果我刪除了get/set方法,當我嘗試從我的Game1.cs中訪問gameOver時遇到了另一個錯誤。如果我將其更改爲以下,我會得到相同的錯誤:

public bool gameOver { get; set; } 

我的問題是,如何解決模糊性錯誤?

回答

18

您需要重命名您的私人GAMEOVER變量。更改此:

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

bool _gameOver = false; 
public bool GameOver { 
     get { return _gameOver; } 
     set { _gameOver = value; } 
    } 

你不能在一個類中使用相同的變量名。

或者,假設你使用的是最新的.NET版本,你可以刪除你的私有變量,只是有:

public bool GameOver { get; set; } 

好運。

+7

1。同樣,下面的默認C#命名準則可以避免這樣的問題(大寫爲屬性 - 'GameOver',私人字段爲小寫 - 'bool gameOver;')。 –

+0

我是C#的新手,所以我不知道這是一個命名指南。如果我有積分,我會贊成,但我不能,所以我只是說謝謝。 :) – slooker

1

你不能有兩個組件使用同一個名字。因此,改變這種:

bool gameOver = false; 

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

要這樣:

private Boolean m_GameOver = false; 

public Boolean GameOver 
{ 
    get { return m_GameOver; } 
    set { m_GameOver = value; } 
} 
2

爲您的私有變量命名與公有的不同。

bool _gameOver = false; 

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

在我來說,這是解決重命名由agregarPropiedad2類 agregarPropiedad。

.CS

public partial class agregarPropiedad2 

Designer.CS

public partial class agregarPropiedad2 

ASPX

Inherits="ProjectName.agregarPropiedad2"