【问题标题】:Can't access public class properties无法访问公共类属性
【发布时间】:2013-10-22 19:03:30
【问题描述】:

我正在尝试创建一个应该在其代码中包含这些变量的新类:

class Map
{
    // Variable declaration
    public int Width { get; set; } // Width of map in tiles
    public int Height { get; set; } // Height of map in tiles
    public int TileWidth { get; set; }
    public int TileHeight { get; set; }
}

但由于某种原因,在 Game1.cs 中创建了一个新的 Map 类后,我似乎无法访问诸如 Width 和 Height 之类的东西。

public class Game1 : Microsoft.Xna.Framework.Game
{
    GraphicsDeviceManager graphics;
    public static SpriteBatch spriteBatch;

    // etc...

    // Class initialization
    Map map = new Map();

    map.Width = 10; // Won't work, says it is a 'field' but used like a 'type'
}

我想我并没有尝试设置财产权,但我不确定如何实际这样做。

我在尝试上述操作时收到两条错误消息:

“Deep.Game1.Map”是一个“字段”,但用作“类型”

类、结构或接口成员声明中的标记“=”无效

【问题讨论】:

  • 您需要在某个方法中使用“map.Width”。我敢打赌你是在课堂上的一个方法之外尝试的。
  • 你确定你没有另一个名为Map的类吗?也许您实际上是在创建另一个类实例?
  • 你有map.Width w = 10; 什么的吗?请务必包含您的确切代码和足够的代码,以便我们可以重现 same 错误。否则,我们将提供疯狂的猜测而不是合格的答案,并且无法有效地帮助您。
  • @EdS。我在第二个 sn-p 中添加了一些代码,以阐明代码在文件中的位置。
  • 看来Servy得到了正确的答案。您不能在构造函数、方法或访问器之外以这种方式分配给map 的成员。

标签: c# class variables


【解决方案1】:

您尚未将该代码放入可执行代码块中。你不能只是让一个属性设置器在一个类型内部浮动;它需要在方法、构造函数等内部。

如果你想在初始化字段时设置宽度,那么你可以使用对象初始化语法:

private Map map = new Map() {Width = 10};

【讨论】:

  • 你还没有将该代码放在可执行代码块中很好的侦查特定错误消息!
  • @jltrem 没有很多方法可以解决这个问题。并进行快速测试以验证哪些错误会导致此特定错误消息。
  • +1 表示可执行代码块,这个词我一直在努力寻找。
  • 我从 LINQPad 运行它,但我希望它与 VS 相同:将 map.Width = 10; 放入类中会导致类、结构或接口中的“无效令牌 '='成员声明”,而不是“一个‘字段’,而是像‘类型’一样使用”
  • @TimS。您在该类定义中是否也有一个名为 map 的字段,位于该代码行之前?如果找不到标识符,我会收到该错误,如果可以,则会收到此错误(加上第三个)。
【解决方案2】:

这行得通:

void Main()
{
    Map map = new Map();

    map.Width = 10;
}

class Map
{
    public int Width { get; set; } // Width of map in tiles
    public int Height { get; set; } // Height of map in tiles
    public int TileWidth { get; set; }
    public int TileHeight { get; set; }
}

也许您在某处缺少;}

【讨论】:

    【解决方案3】:

    我不能确定,但​​看起来您可能正在尝试在方法之外设置属性。试试这个:

    class Game1
    {
        Map map = new Map();
    
        public Game1()
        {
            map.Width = 10;
        }
    }
    

    【讨论】:

      【解决方案4】:

      设置Width 属性的代码是否在函数内部?它需要。如果不是,您将看到此错误。

      也不确定此行是否输入正确,但缺少分号:

       map.Width = 10
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-11
        • 2011-11-22
        • 2021-03-02
        • 1970-01-01
        • 2014-01-26
        • 1970-01-01
        • 1970-01-01
        • 2013-09-11
        相关资源
        最近更新 更多