C# 子类最佳实践
C# Subclass Best Practice
我目前正在使用 XNA 开发一款游戏,但我不确定应该如何进行以下操作...
我有一个基地 class 建筑物
public class BuildingsBase
{
private int _hp;
public int hp
{
get { return _hp; }
set { _hp= value; }
}
private int _woodRequired;
public int woodRequired
{
get { return _woodRequired; }
set { _woodRequired = value; }
}
}
然后我有多个子class建筑类型,例如
public class TownHall:BuildingsBase
{
public int foodHeld;
public TownHall()
{
foodHeld = 100;
woodRequired = 500;
}
}
我的问题是,为构建子classes 设置默认值的最佳方法是什么。
例如,townhall 的 woodRequired 设置为 500,但在代码的不同位置,我需要在声明 townhall 实例之前访问此值(检查是否有足够的木材来建造时)。
我目前有一个针对每种建筑类型的全局默认变量数组,但我想知道是否有更好的方法。
if (Globals.buildingDefaults[BuildingType.Townhall].woodRequired < Globals.currentWood)
{
Townhall newTH = new Townhall();
}
通常情况下,他们会创建享元 (see pattern)。该对象包含的属性对于每个实例都是相同的。无需单独更改(或实际存储)每个实例所需的木材量。
在非常基本的设计中,它看起来像:
class BuildingTemplate
{
public int WoodRequired { get; set; }
}
class Templates
{
public static BuildingTemplate TownHall { get; set; }
}
最后你会调用这样的方法:
public bool CanBuildTownHall(Player player)
{
return player.HasEnoughResources(Templates.TownHall);
}
当然可以用字典来检索模板,玩家应该不太了解搭建要求。我只是在这里说明模式。
如果玩家有足够的资源,您可以使用模板减去数量并创建TownHall
的实际实例。有对实际模板的引用是很好的,因为您可能正在访问对所有 TownHall
有效的其他全局属性(例如 audio/visuals/...)。
class TownHall
{
public TownHall(BuildingTemplate template)
{
_template = template;
}
}
我目前正在使用 XNA 开发一款游戏,但我不确定应该如何进行以下操作...
我有一个基地 class 建筑物
public class BuildingsBase
{
private int _hp;
public int hp
{
get { return _hp; }
set { _hp= value; }
}
private int _woodRequired;
public int woodRequired
{
get { return _woodRequired; }
set { _woodRequired = value; }
}
}
然后我有多个子class建筑类型,例如
public class TownHall:BuildingsBase
{
public int foodHeld;
public TownHall()
{
foodHeld = 100;
woodRequired = 500;
}
}
我的问题是,为构建子classes 设置默认值的最佳方法是什么。
例如,townhall 的 woodRequired 设置为 500,但在代码的不同位置,我需要在声明 townhall 实例之前访问此值(检查是否有足够的木材来建造时)。
我目前有一个针对每种建筑类型的全局默认变量数组,但我想知道是否有更好的方法。
if (Globals.buildingDefaults[BuildingType.Townhall].woodRequired < Globals.currentWood)
{
Townhall newTH = new Townhall();
}
通常情况下,他们会创建享元 (see pattern)。该对象包含的属性对于每个实例都是相同的。无需单独更改(或实际存储)每个实例所需的木材量。
在非常基本的设计中,它看起来像:
class BuildingTemplate
{
public int WoodRequired { get; set; }
}
class Templates
{
public static BuildingTemplate TownHall { get; set; }
}
最后你会调用这样的方法:
public bool CanBuildTownHall(Player player)
{
return player.HasEnoughResources(Templates.TownHall);
}
当然可以用字典来检索模板,玩家应该不太了解搭建要求。我只是在这里说明模式。
如果玩家有足够的资源,您可以使用模板减去数量并创建TownHall
的实际实例。有对实际模板的引用是很好的,因为您可能正在访问对所有 TownHall
有效的其他全局属性(例如 audio/visuals/...)。
class TownHall
{
public TownHall(BuildingTemplate template)
{
_template = template;
}
}