继承和 Collections
Inheritance and Collections
我有继承问题。
我从类似于以下内容开始:
public class POpt
{
...
private decimal profit;
public decimal Profit
{
get { return profit; }
}
...
}
public class Opt
{
...
private List<POpt> pases;
public int NumPasesPositivos()
{
return pases.Where(o => o.Profit > 0).Count();
}
...
}
它有效..我可以调用 NumPasesPositivos() 并获得列表 pases 中具有正利润的 pases 的数量。
现在,我必须编写两个类似的 classes,例如 Popt 和 Opt...并使用继承:
abstract public class P
{
...
...
}
public class POpt: P
{
...
private decimal profit;
public decimal Profit
{
get { return profit; }
}
...
}
public class PBt: P
{
...
...
}
还有:
abstract public class T
{
...
private List<P> pases;
...
}
public class Opt: T
{
...
public int NumPasesPositivos()
{
return pases.Where(o => o.Profit > 0).Count();
}
...
}
public class Bt:T
{
...
...
}
现在,class T 阶段中的列表可以是 POpt 或 PBt 类列表。问题是现在,我不能使用 NumPasesPositivos,因为 pases 可以是 POpt 或 PBt,而 Profit 在 PBt 中没有定义,我不能投射
将 OPt 传递到类似 (Listpases).Where(o => o.Profit > 0).Count() ....我不确定如何解决问题也不知道如何重写 classes...
您可以使用 OfType 扩展方法并限制为可以转换为 POpt
的类型。
public int NumPasesPositivos()
{
return pases.OfType<POpt>().Where(o => o.Profit > 0).Count();
}
我有继承问题。
我从类似于以下内容开始:
public class POpt
{
...
private decimal profit;
public decimal Profit
{
get { return profit; }
}
...
}
public class Opt
{
...
private List<POpt> pases;
public int NumPasesPositivos()
{
return pases.Where(o => o.Profit > 0).Count();
}
...
}
它有效..我可以调用 NumPasesPositivos() 并获得列表 pases 中具有正利润的 pases 的数量。
现在,我必须编写两个类似的 classes,例如 Popt 和 Opt...并使用继承:
abstract public class P
{
...
...
}
public class POpt: P
{
...
private decimal profit;
public decimal Profit
{
get { return profit; }
}
...
}
public class PBt: P
{
...
...
}
还有:
abstract public class T
{
...
private List<P> pases;
...
}
public class Opt: T
{
...
public int NumPasesPositivos()
{
return pases.Where(o => o.Profit > 0).Count();
}
...
}
public class Bt:T
{
...
...
}
现在,class T 阶段中的列表可以是 POpt 或 PBt 类列表。问题是现在,我不能使用 NumPasesPositivos,因为 pases 可以是 POpt 或 PBt,而 Profit 在 PBt 中没有定义,我不能投射
将 OPt 传递到类似 (List
您可以使用 OfType 扩展方法并限制为可以转换为 POpt
的类型。
public int NumPasesPositivos()
{
return pases.OfType<POpt>().Where(o => o.Profit > 0).Count();
}