gpt4 book ai didi

c# - 传入对象并即时转换

转载 作者:太空宇宙 更新时间:2023-11-03 19:56:16 25 4
gpt4 key购买 nike

我可以访问一个抽象方法,该方法采用名为“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 都具有这些属性,您也可以更改方法签名以接受该方法知道如何处理的一种具体类型。

请注意,在编写此类代码时,接口(interface)非常有用。例如,您可以定义 IWeaponized 并让任何具有武器的东西实现该接口(interface),而任何带装甲的东西都可以实现 IArmored 接口(interface)。既有武器又有装甲的东西会同时实现这两个接口(interface)。您的通用方法将接受接口(interface),而不是类。

关于c# - 传入对象并即时转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33308036/

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