覆盖静态字段

Ash*_*ies 2 c# windows polymorphism static

我正在为我的游戏编写一个C#游戏引擎,我遇到了问题.

我需要为每种不同类型的块做一个XNA.Rectangle drawRectangle.

块存储在块列表中,因此必须覆盖可以通过绘制访问而不需要进行大量渲染的属性.

我已经尝试了很多方法,但没有办法.

这是我正在做的当前的一个:

Block.cs

protected static Rectangle m_drawRectangle = new Rectangle(0, 0, 32, 32);
public Rectangle drawRectangle
{
    get { return m_drawRectangle; }
}
Run Code Online (Sandbox Code Playgroud)

BlockX.cs

protected static Rectangle m_drawRectangle = new Rectangle(32, 0, 32, 32);
Run Code Online (Sandbox Code Playgroud)

但是,在创建BlockX并进行访问时drawRectangle,它仍会返回0,0,32,32 .

理想情况下,我可以覆盖drawRectangle成员,但这样做意味着在每个块类中创建一个成员.我只想调整m_drawRectangle.

每个块将被创建数百次,所以我不希望它是非静态的,在构造函数中执行它会很愚蠢.

除了仅使用静态函数初始化每个块中的静态事物之外,还有更好的方法吗?

编辑:

总而言之,我的要求是:

  • BlockX.cs中的最小额外代码要覆盖
  • 场必须保持静止
  • 优选地,不必drawRectangle仅覆盖m_drawRectangle.
  • 每次访问属性时都不必创建新的矩形

Jon*_*eet 6

静态成员不是多态的 - 它就像那样简单.请注意,请您谈谈财产静态-你不必此刻的静态属性.您有一个实例属性和两个静态字段.

有两种选择:

  • 在每个类中重写的虚拟成员,即使它不需要来自除其类型之外的对象的任何状态
  • 传递矩形以绘制到块的构造函数中,并将其存储在字段中