多个派生类的C#单一通用集合方法

时间:2010-01-26 11:29:54

标签: c# generics inheritance collections

方案

我有一个基类和2个(可能是3个)从该基类派生的其他类。

 //Base Class
 class RateInstrument
 {
    public string Ric { get; set; }

    public string Tenor { get; set; }
    public double Rate { get; set; }

    public DateTime Date { get; set; }
    public double Price { get; set; }

    public double Bid { get; set; }
    public double Ask { get; set; }

    public RateInstrument(string tenor, double rate)
    {
        Tenor = tenor;
        Rate = rate;
    }

    public RateInstrument(DateTime date, double price)
    {
        Date= date;
        Price = price;
    }
   }

    //Derived Class 1
    class Swap : RateInstrument
    {
    public Swap(string tenor, double rate): base(tenor,rate)
    {
    }

    }

     //Derived Class 2
     class Future: RateInstrument
     {
    public Future(DateTime date, double price): base(date,price)
    {

    }
    }

问题

有时我可能需要收集所有费率工具,有时只需收集每个单独的RateInstrument本身。 实际上我想要的是在Base类中使用一些方法来做到这一点但是我不完全确定如何去做。我很好地构建代码以帮助我学习等。任何帮助都将非常感激。

EDIT ----------

抱歉,我的意思是能够以速记方式实例化对象集合。特别是如果我必须一次创造100个。

2 个答案:

答案 0 :(得分:2)

在C#3.5中,你并不需要特别做任何事情。 IEnumerable<RateInstrument>会很好。

如果只想要特定的子类型,可以使用OfType扩展方法:

var swaps = instruments.OfType<Swap>();

答案 1 :(得分:1)

你现有的代码不是这样做的吗?

List<RateInstrument> instruments = new List<RateInstrument>();
instruments.Add(new Swap("bla", 100));
instruments.Add(new OtherSwap("bla2", 200));

var swapInstruments = from instrument in instruments where instrument Is Swap select instrument;