扩展方法是否可以解决此问题?

在我的程序中,用于绘制的源矩形可以是规则矩形,空矩形或X或Y为-1的矩形.如果矩形是正常的(示例为(0,0,64,64)),则仅从纹理绘制矩形.如果是Rectangle.Empty,则不绘制任何内容,仅继续循环.如果源矩形的X或Y为-1,则将其确定为碰撞图块.

问题在于它-1不直观.这是令人困惑的解决方案.同样,如果出现更多类型的图块,它将开始变得荒谬,如-2表示慢速图块或-3表示水图块.

另一个问题是,由于我不知道早期会出现碰撞图块,而常规的XNA矩形也很好,因此整个系统(目前仅约1000行代码)使用XNA矩形.我认为此时我将不得不制作一个单独的类并更新所有内容,但我不确定.

有什么好的解决方案?我根本没有涉足扩展方法.可以将它们应用于Rectangle类,并给予诸如IsCollisionTile()或IsBlankTile()之类的方法吗?最初,我希望可以从Rectangle类派生出一个Tile类,但不幸的是该类是密封的.我想另一个简单的解决方案可能只是制作一个全局常量类,其中-1是CollisionTile,0是BlankTile等.这至少会使它更容易理解,但这在我看来仍然很丑陋:

if (tiles[y, x].X == Constants.BlankTile)
    continue;

if (tiles[y, x].X == Constants.CollisionTile)
{
    Utility.DrawRectangle(spriteBatch, new Rectangle(x * TileSize, y * TileSize, TileSize, TileSize), collisionTileColor);
    continue;
}

spriteBatch.Draw(tileset, new Rectangle(x * TileSize, y * TileSize, TileSize, TileSize), tiles[y, x], Color.White);

如果只有一个属性,我可以使用带有控件的Tag.我真的不想放弃使用Rectangle类,因为它是如此嵌入到系统中并且该程序纯粹是功能性的,只是在这方面不是美观的.理想情况下,我更喜欢只允许扩展Rectangle类以某种方式能够与其客户端进行通信的解决方案.

好吧,那比我最初希望的要花很多时间.很抱歉长时间阅读x_x

解决方法:

如果无法继承该类(通常是此处的适当解决方案.对不起,Microsoft!),则扩展方法可以按您所描述的那样灵活地工作.
问题是-IMO通常使用像getters这样的方法使用C#和OOP风格较差.这就是吸气剂的用途.
因此,我认为全局常量选项与通用样式更加一致,但这只是我的观点.

从完全编程的POV中看,这两种方法在全局常量类可能稍快的地方都有效(尽管我不确定)

上一篇:c#-更改在UI设计器中创建的控件的默认访问修饰符


下一篇:C#-获取锯齿状数组的前三个元素