【发布时间】:2019-12-24 17:00:21
【问题描述】:
This 似乎回答了我的问题,但我遇到了错误。看起来有一个非常简单的解释,但我一生都无法弄清楚原因。
这是经典的多态继承问题...
我有一个基类
public abstract class Client
{
public int Start;
public int End;
}
还有两个继承类
public class Family : Client { }
public class Helper : Client { }
我在这个列表中插入一些值
static List<Family> familySchedule = new List<Family>();
并创建一个接收客户端的方法
static void SortEarlyToLate(List<Client> clientList)
{
//some code doing stuff like changing Client.Start
}
现在,当我打电话时
SortEarlyToLate(familySchedule);
我收到错误
参数 1:无法从 'System.Collections.Generic.List
' 转换为 'System.Collections.Generic.List '
根据问题referenced at the top of this question,这应该可行。 我能想到它为什么不起作用的唯一可能性是,当它是传入的派生类时,多态性不支持在方法内部使用基类的对象。即在方法内部使用 Client.Start被传递进来的家庭。
如果正确,是否有办法创建一个可以处理不同类型的泛型方法?
(多态性不是为此而创建的吗?)
或者是使用不同参数两次创建相同方法的唯一解决方案?
如果我错过了一个非常明显的解决方案,请善待......我已经为此绞尽脑汁很久了,我的大脑已经完全糊涂了。
编辑:
我的问题更简洁的总结是:虽然有一种方法可以允许泛型参数,例如static void SortEarlyToLate<T>(List<T> clientList) where T : Client,
这阻止了从方法内部访问对象属性的能力。现在 Family.Start 将返回错误,Client.Start 也将返回错误。我不太确定不会返回错误。
除非聪明人有答案,否则我认为目前唯一的解决方案是将所有参数解析给客户端。
【问题讨论】:
-
List
不是 List 的派生类 -
想象一下,您将在传递给方法的
Familiy列表中添加一个Helperobject(它的类型为Clientright?)。嗯,是的,但实际上没有。它被视为List<Client>,但该对象仍然是List<Family>,您显然无法向其中添加Helper类型的对象。
标签: c# inheritance polymorphism derived-class