传入对象并即时转换
pass in object and convert it on the fly
我可以访问一个抽象方法,该方法采用名为 'Weapon' 的类型。
我传入的对象有对父对象的引用,但我必须做一个转换。
做一次似乎没问题,但对于其他方法,我可能需要传递 3、4 甚至 5 个对象,这意味着我最终必须先转换所有这些对象访问我需要的属性。
有没有办法传入转换而不是包含引用的实际对象?
类似这样的东西,我知道这不能编译:
GetRobotSystems(Weapon r=(MilitaryRobot)r.Baserobot)
这是工作代码:
protected override IEnumerable<WeaponsCollection> GetRobotSystems(Weapon robot)
{
MilitaryRobot r = (MilitaryRobot)robot.BaseRobot;
yield return r.Aromor;
yield return r.Weapons;
}
I have access to an abstract method that takes a type called 'Weapon'.
不,您没有抽象方法。它只知道如何处理 MilitaryRobot 类型的对象。
如果所有 Weapon.BaseRobot 都具有 Armor 和 Weapons 属性,则无需转换为 MilitaryRobot。如果并非所有 Weapon.BaseRobot 都具有这些属性,您也可以更改方法签名以接受该方法知道如何处理的一种具体类型。
请注意,在编写此类代码时,接口非常有用。例如,您可以定义 IWeaponized 并让任何具有武器的东西实现该接口,而任何带装甲的东西都可以实现 IArmored 接口。既有武器又有装甲的东西会同时实现这两个接口。您的通用方法将接受接口,而不是 类.
Eric 描述的界面方法是解决此类游戏对象问题的绝佳方法,但组合也可以。
问题是您在这里混合了组合和继承模式,最终会变得有点混乱。
具有 Weapon/Armour 属性的更高级别 "game object" 的想法很好。这是一个构图模式。
但为什么会有 Robot/MilitaryRobot 继承模式呢?您可以提取出区分这些不同类型之间差异的特征,并将它们更改为更通用的 "Actor" 或 "GameObject".
上的属性
像这样的组合模式在游戏设计中非常有用。但是继承模式可能会导致代码变得脆弱且几乎不可能重构。
我可以访问一个抽象方法,该方法采用名为 'Weapon' 的类型。
我传入的对象有对父对象的引用,但我必须做一个转换。
做一次似乎没问题,但对于其他方法,我可能需要传递 3、4 甚至 5 个对象,这意味着我最终必须先转换所有这些对象访问我需要的属性。
有没有办法传入转换而不是包含引用的实际对象?
类似这样的东西,我知道这不能编译:
GetRobotSystems(Weapon r=(MilitaryRobot)r.Baserobot)
这是工作代码:
protected override IEnumerable<WeaponsCollection> GetRobotSystems(Weapon robot)
{
MilitaryRobot r = (MilitaryRobot)robot.BaseRobot;
yield return r.Aromor;
yield return r.Weapons;
}
I have access to an abstract method that takes a type called 'Weapon'.
不,您没有抽象方法。它只知道如何处理 MilitaryRobot 类型的对象。
如果所有 Weapon.BaseRobot 都具有 Armor 和 Weapons 属性,则无需转换为 MilitaryRobot。如果并非所有 Weapon.BaseRobot 都具有这些属性,您也可以更改方法签名以接受该方法知道如何处理的一种具体类型。
请注意,在编写此类代码时,接口非常有用。例如,您可以定义 IWeaponized 并让任何具有武器的东西实现该接口,而任何带装甲的东西都可以实现 IArmored 接口。既有武器又有装甲的东西会同时实现这两个接口。您的通用方法将接受接口,而不是 类.
Eric 描述的界面方法是解决此类游戏对象问题的绝佳方法,但组合也可以。
问题是您在这里混合了组合和继承模式,最终会变得有点混乱。
具有 Weapon/Armour 属性的更高级别 "game object" 的想法很好。这是一个构图模式。
但为什么会有 Robot/MilitaryRobot 继承模式呢?您可以提取出区分这些不同类型之间差异的特征,并将它们更改为更通用的 "Actor" 或 "GameObject".
上的属性像这样的组合模式在游戏设计中非常有用。但是继承模式可能会导致代码变得脆弱且几乎不可能重构。