鉴于此
public abstract class AbstractOrder
{
//some properties...
}
public class AnonymousOrder:AbstractOrder
{
//some properties...
}
public class PartnerOrder:AbstractOrder
{
//some properties...
}
public AbstractOrder FindOrderByConfirmationNumber(string confirmationNumber)
{
ICriteria criteria =
Session.CreateCriteria(typeof(AbstractOrder))
.SetMaxResults(10)
.AddOrder(Order.Desc("PurchasedDate"))
.Add(Restrictions.Eq("ConfirmationNumber", confirmationNumber));
var l = criteria.List<AbstractOrder>();
AbstractOrder ao = l[0] as AbstractOrder;
return ao as AbstractOrder;
}
有人可以解释原因吗
PartnerOrder order = repo.FindOrderByConfirmationNumber(confirmationNumber)
返回一种AnonymousOrder以及如何让它返回一种PartnerOrder?
答案 0 :(得分:1)
AbstractOrder是一个抽象类。没有对象只能是一个抽象类,它可以作为基类从它继承,但它总是其他东西。
它返回的类型是AnonymousOrder,它是最具体的类,但它也是一个AbstractOrder。你可以将它视为一个AbstractOrder,不应该有任何影响。
答案 1 :(得分:1)
FindOrder 返回AbstractOrder
类型;看看它的宣言。它返回的对象可能是AnonymousOrder
的实例,但所有AnonymousOrder
个实例也是AbstractOrder
个实例,因为AnonymousOrder
继承自AbstractOrder
}}
我认为您真正的问题是尝试将AnonymousOrder
实例分配给PartnerOrder
引用。这不起作用,因为这两种类型都不是从另一种派生的。
然而,这将起作用:
AnonymousOrder order = (AnonymousOrder)repo.FindOrderByConfirmationNumber(confirmationNumber);
或者,您可以测试返回值的类型:
AbstractOrder order = repo.FindOrderByConfirmationNumber(confirmationNumber);
PartnerOrder partnerOrder = order as PartnerOrder;
if (partnerOrder != null)
//...
如果您确实需要一个返回AnonymousOrder的confirmationNumber的PartnerOrder实例,那么您将需要一个采用AnonymousOrder实例并返回PartnerOrder实例的方法。或者,也许你应该重新考虑你的设计。