gpt4 book ai didi

c# - 在 C# 中传递派生对象的集合

转载 作者:太空狗 更新时间:2023-10-30 01:07:05 25 4
gpt4 key购买 nike

我仍然对 OO 和 C# 感兴趣。我确信这是一个简单的问题,我想我知道答案,但我想确定一下。

如果我有一个名为 Car 的类和另一个名为 Ford 的类,它继承自 Car,还有另一个名为 Mustang 的类 继承自 Ford 类。

创建一个接受 Car 对象集合的方法然后当我调用该方法时实际上将 Mustang 集合传递给该方法是否可以接受/可能?或 Ford) 对象,因为它们实际上是 Car 对象?

我的想法是,这应该是可能的,前提是我只能访问 Car 类的 Properties\Methods。我是否以此为基础?

此外,如果我是对的,您可以这样做:您是否需要在方法调用中将 Mustang 集合转换为 Car 集合?

最佳答案

不,那不可能。

所以如果我们有一个接受 List<Car> 的函数类型。显然,该函数应该能够添加 Prius。到那个名单,不是吗?好吧,如果你被允许通过 List<Mustang>在此方法中,您刚刚添加了一个 PriusList<Mustang> ,显然那会很糟糕。

现在如果,而不是传递 List , 该方法的参数为 IEnumerable或某些其他只读集合类型之一,那么它可能是“协变的”。在这种情况下,您可以接受一个 IEnumerable<Car> 作为示例。并传递一个 List<Mustang>因为你永远不会添加到列表中,你只是访问各种元素,只要所有 Mustang对象是 Car对象不是问题。

设计似乎也有点……不对劲。我不认为 Ford应该继承自 Car . Ford不是汽车,它是一个品牌,一个公司,一种汽车。 Mustang 是一辆汽车,所以它继承汽车是有意义的。我会创建一个新类型,比如 Manufacturer其中你可以创建 Ford , Toyota等,并将其设为 Car 的(只读)属性.

关于c# - 在 C# 中传递派生对象的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13572719/

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