gpt4 book ai didi

c# - 覆盖静态字段

转载 作者:可可西里 更新时间:2023-11-01 09:42:19 26 4
gpt4 key购买 nike

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

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

block 存储在 block 列表中,因此必须覆盖可以通过绘制访问而无需大量转换的属性。

我尝试了很多方法,但没有一个奏效。

这是我目前正在做的:

block .cs

protected static Rectangle m_drawRectangle = new Rectangle(0, 0, 32, 32);
public Rectangle drawRectangle
{
get { return m_drawRectangle; }
}

BlockX.cs

protected static Rectangle m_drawRectangle = new Rectangle(32, 0, 32, 32);

但是当创建 BlockX 并访问 drawRectangle 时,它仍然返回 0, 0, 32, 32。

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

每个 block 都会被创建数百次,所以我不希望它是非静态的,在构造函数中这样做会很愚蠢。

除了在每个 block 中放置一个静态函数来初始化静态事物之外,还有什么更好的方法吗?

编辑:

综上所述,我的要求是:

  • BlockX.cs 中要覆盖的最少额外代码
  • 字段必须保持静态
  • 最好不必覆盖 drawRectangle,只需覆盖 m_drawRectangle
  • 不必在每次访问属性时都创建一个新的矩形

最佳答案

静态成员不会被多态地调用——就这么简单。请注意,您谈论的属性保持是静态的——您目前拥有静态属性。您有一个实例属性和两个静态字段

几个选项:

  • 在每个类中被重写的虚拟成员,即使它不需要对象的任何状态而不是其类型
  • 将要绘制的矩形传入 block 的构造函数中,并存储在一个字段中

关于c# - 覆盖静态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11179318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com