我正在尝试为Transaction,Order和OrderCollection使用一些基本抽象类。 TransactionCog继承Transaction和OrderCollection继承List和OrderCogCollection继承OrderCollection,OrderCog继承Order。 TransactionCog必须具有OrderCogCollection的成员。
我正在尝试使用Transaction来获得OrderCollection的抽象属性,以便TransactionCog必须覆盖该属性,而是使用OrderCogCollection类型。当然,我现在的方式是给我一个TransactionCog不实现继承的抽象成员。
我正在尝试这样做,以便如果我接下来要订购Widget或Gear,我会从基地继承并强制我使用相应的Order' ItemName' Collection覆盖该属性。造成这种情况的部分原因是每个Order' ItemName' Collection都会拥有一些其他人不会拥有的特殊功能和属性。如果可能的话,我很难看到我应该在哪里工作。
public abstract class Transaction
{
public abstract OrderCollection<Order> Orders
{ get; set; }
}
public abstract class Order
{
private int _id;
public int ID
{
get { return _id; }
set { _id = value; }
}
}
public abstract class OrderCollection<T> : System.Collections.Generic.List<T>
{
abstract public int GetIntValue(int test);
}
class OrderCog : TestWindowsFormCsharp.Classes.BaseClasses.Order
{
public OrderCog()
{
}
}
public class OrderCogCollection<OrderCog> : TestWindowsFormCsharp.Classes.BaseClasses.OrderCollection<OrderCog>
{
public OrderCogCollection()
{
}
public override int GetIntValue(int test)
{
return test;
}
}
class TransactionCog : TestWindowsFormCsharp.Classes.BaseClasses.Transaction
{
private OrderCogCollection<OrderCog> cogs;
public TransactionCog()
{
}
public override OrderCogCollection<OrderCog> Orders
{
get { return cogs; }
set { cogs = value; }
}
}
答案 0 :(得分:1)
覆盖必须使声明签名保持多态,因此在您的情况下:
public override OrderCollection<Order> Orders
{
get { return cogs; }
set
{
// assert value is OrderCogCollection<OrderCog>
cogs = (OrderCogCollection<OrderCog>)value;
}
}
public OrderCogCollection<OrderCog> OrderCogs
{
get { return cogs; }
set { cogs = value; }
}