C# 当参数类型为基类时,将派生类传递给方法
似乎回答了我的问题,但我错了。看起来有一个非常简单的解释,但我一辈子都不知道为什么 这是典型的多态性继承问题…C# 当参数类型为基类时,将派生类传递给方法,c#,inheritance,polymorphism,derived-class,C#,Inheritance,Polymorphism,Derived Class,似乎回答了我的问题,但我错了。看起来有一个非常简单的解释,但我一辈子都不知道为什么 这是典型的多态性继承问题… 我有一个基础班 public abstract class Client { public int Start; public int End; } 和两个继承类 public class Family : Client { } public class Helper : Client { } 我在此列表中插入了一些值 static List<Family&g
我有一个基础班
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>();
我犯了一个错误
参数1:无法从“System.Collections.Generic.List”转换为“System.Collections.Generic.List”
根据问题,这应该有效。
我能想到的唯一一种可能是,当它是传入的派生类时,多态性不支持在方法中使用基类的对象。当它是一个已传入的族时,在方法内部启动
如果这是正确的,难道没有办法创建一个可以处理不同类型的泛型方法吗?(多态性不是为此而创建的吗?) 或者,唯一的解决方案是使用不同的参数创建相同的方法两次 如果我错过了一个非常明显的解决方案,请友好一点。。。我在这上面苦思冥想了这么久,我的大脑已经完全模糊了 编辑: 我的问题的一个更简洁的总结是:尽管有一种方法允许使用泛型参数,例如
static void sorter arlytolate(列表客户端列表),其中T:Client
,这会阻止从方法内部访问对象属性。现在Family.Start将返回错误,Client.Start也将返回错误。我不太确定什么不会返回错误。 除非某个聪明人有答案,否则我认为目前唯一的解决方案是将所有参数解析到客户端。您可以看到这一点 要绕过此问题,您有两个选项: -在传递给方法之前,将您的列表转换为
客户机的列表
SortEarlyToLate(familySchedule.Cast<Client>().ToList());
SortEarlyToLate(familySchedule.Cast().ToList());
-初始化客户端列表并添加族对象
static List<Client> clientSchedule = new List<Client>();
clientSchedule.Add(new Family());
static List clientSchedule=new List();
clientSchedule.Add(新族());
List不是List的派生类想象一下,您将向传递到方法中的family
列表中添加一个Helper
对象(它的类型是Client
right?)。是的,但实际上不是。它被视为一个列表
,但对象仍然是一个列表
,您显然无法向其中添加Helper
类型的对象。
SortEarlyToLate(familySchedule.Cast<Client>().ToList());
static List<Client> clientSchedule = new List<Client>();
clientSchedule.Add(new Family());